标签: mockk-verify

如何检查一个方法是否没有被mock调用?

我需要检查单元测试中是否未调用某个方法。这是我所做的一个示例测试,用于检查该方法是否被调用并且它工作得很好:

@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)

android unit-testing kotlin mockk mockk-verify

29
推荐指数
1
解决办法
2万
查看次数

Mockk匹配和重载函数withArg

您好,我正在尝试找到一种方法来匹配验证中的重载函数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函数

kotlin mockk mockk-verify

3
推荐指数
1
解决办法
1985
查看次数

Mockk verify 正在尝试验证从未被调用过的 Log.d()

因此,我编写了如下单元测试。它基本上调用 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)

android unit-testing kotlin mockk mockk-verify

1
推荐指数
1
解决办法
1623
查看次数

标签 统计

kotlin ×3

mockk ×3

mockk-verify ×3

android ×2

unit-testing ×2