我需要检查单元测试中是否未调用某个方法。这是我所做的一个示例测试,用于检查该方法是否被调用并且它工作得很好:
@Test
fun viewModel_selectDifferentFilter_dispatchRefreshAction() {
val selectedFilter = FilterFactory.make()
val event = GroceriesAisleFiltersUiEvent.SelectFilter(
filter = selectedFilter,
refreshListAction = mockk()
)
every { event.refreshListAction(selectedFilter) } just runs
viewModel.dispatchViewAction(event)
verify { event.refreshListAction(selectedFilter) }
}
Run Code Online (Sandbox Code Playgroud)
为此,我使用 mockk 的verify函数来检查该方法是否被调用。
有没有办法使用 检查mockk该方法是否未被调用?简而言之,我需要用此检查代替注释来完成下面的代码:
@Test
fun viewModel_selectSameFilter_notDispatchRefreshAction() {
val selectedFilter = viewModel.viewState.value.selectedFilter
val event = GroceriesAisleFiltersUiEvent.SelectFilter(
filter = selectedFilter,
refreshListAction = mockk()
)
every { event.refreshListAction(selectedFilter) } just runs
viewModel.dispatchViewAction(event)
// TODO: verify if method's not invoked
}
Run Code Online (Sandbox Code Playgroud) 您好,我正在尝试找到一种方法来匹配验证中的重载函数withArg
该医生并没有真正指出这一点
every { getResponse.Ids } returns listOf(121212L)
assert( client.getExtIds(Ids) )
verify {
client.getExtIdsCall().call(
withArg {
assertEquals(GetExtIdsRequest.builder()
.withIds("foo")
.withType("bar")
.build().hashCode(), it.hashCode()
)
}
)
}
Run Code Online (Sandbox Code Playgroud)
像上面这样。但不幸的是我不能,因为它client.getExtIdsCall().call()接受两种不同类型的对象。其中之一有hashCode我想要的。所以it无法正确引用调用hashCode函数
因此,我编写了如下单元测试。它基本上调用 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) …Run Code Online (Sandbox Code Playgroud)