Aks*_*aru 1 android unit-testing kotlin mockk mockk-verify
因此,我编写了如下单元测试。它基本上调用 Viewmodel 类中的方法。
@Test
fun `on clear Cached Calls AppUtility ClearCache`() {
sut.clearCache()
verify(exactly = 1) {
appUtilityMock.clearCache()
}
}
Run Code Online (Sandbox Code Playgroud)
视图模型中的方法
fun clearCache() {
Log.d(TAG, "clearCache:e ")
avonUtility.clearCache()
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试验证clearCache()函数是否被调用。
当我运行测试时,出现以下错误。一旦我删除该行,它就可以工作(成功)
Log.d(TAG, "clearCache:e ")。
错误堆栈跟踪
java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.
at android.util.Log.d(Log.java)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.mockk.proxy.jvm.advice.MethodCall.call(MethodCall.kt:14)
at io.mockk.proxy.jvm.advice.SelfCallEliminatorCallable.call(SelfCallEliminatorCallable.kt:14)
at io.mockk.impl.instantiation.JvmMockFactoryHelper.handleOriginalCall(JvmMockFactoryHelper.kt:83)
at io.mockk.impl.instantiation.JvmMockFactoryHelper.access$handleOriginalCall(JvmMockFactoryHelper.kt:20)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1$invocation$$inlined$stdFunctions$lambda$1.invoke(JvmMockFactoryHelper.kt:28)
at io.mockk.impl.stub.MockKStub$handleInvocation$originalPlusToString$1.invoke(MockKStub.kt:227)
at io.mockk.impl.stub.SpyKStub.defaultAnswer(SpyKStub.kt:15)
at io.mockk.impl.stub.MockKStub.answer(MockKStub.kt:42)
at io.mockk.impl.recording.states.AnsweringState.call(AnsweringState.kt:16)
at io.mockk.impl.recording.CommonCallRecorder.call(CommonCallRecorder.kt:53)
at io.mockk.impl.stub.MockKStub.handleInvocation(MockKStub.kt:263)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1.invocation(JvmMockFactoryHelper.kt:25)
at io.mockk.proxy.jvm.advice.Interceptor.call(Interceptor.kt:20)
at android.util.Log.d(Log.java)
Run Code Online (Sandbox Code Playgroud)
我有模拟 AppUtility 像private val appUtilityMock: AppUtility = mockk(relaxed = true).
我不确定出了什么问题。请帮助我理解。我正在使用 MockK 进行测试。
您正在调用该函数Log.d,但这是在android.util.Log,因此在您的测试中不可用。请参阅文档以获取更多信息。您可以通过将其添加到 gradle 文件的以下部分来添加默认实现android {:
testOptions {
unitTests.returnDefaultValues = true
}
Run Code Online (Sandbox Code Playgroud)
您还可以在您的 Log 周围注入一个包装器并模拟该包装器,就像您对AppUtility.
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |