3

我似乎无法在 android 测试中模拟私有函数。我还在使用全开放插件进行 pre-P 测试。在非安卓测试上,它运行没有问题。我认为它也应该在 android 上工作,因为它在 MockK-android 上被标记。这没有实施还是我遗漏了一些明显的东西?

androidTestImplementation "io.mockk:mockk-android:1.8.7"

@OpenForTesting
class A {
    fun publicFun() = privateFun()
    private fun privateFun() {}
    protected fun protectedFun() {}
}

@Test
fun privateFunctionMock() {
    val spy = spyk<A>()
    val mock = mockk<A>()
    val a = A()

    val functions = a::class.functions // size -> 6
    val spyFunctions = spy::class.functions // size -> 5
    val mockFunctions = mock::class.functions // size -> 5

    every { spy["privateFun"]() } returns Unit

    a.publicFun()
}


失败并出现异常,因为缺少私有函数。
io.mockk.MockKException:找不到用于动态调用的函数 privateFun()

4

2 回答 2

2

子类化用于为 pre-P android 仪器测试创建模拟和间谍。这意味着基本上会跳过私有方法,因为无法继承它们。这样计数器不计算私有方法。

于 2018-09-25T19:05:26.353 回答
-2
InternalPlatformDsl.dynamicSet(autoBannerViewPagerMock, "mBannerList", list)
every { autoBannerViewPagerMock.invoke("loadCoverImage") withArguments listOf(any<Int>(), any<Int>(), any<ImageView>(), any<stMetaBanner>()) } returns Unit
于 2020-04-19T02:48:19.723 回答