Kotlin 如何用mock在android测试中模拟私有函数?

Kotlin 如何用mock在android测试中模拟私有函数?,kotlin,android-testing,mockk,Kotlin,Android Testing,Mockk,我似乎无法在android测试中模拟私有函数。我还使用全开放插件进行pre-P测试。在非android测试中,它运行没有问题。我想它也应该在android上运行,因为它在MockK android上有标记。这是没有实现,还是我遗漏了一些明显的东西 androidTestImplementation "io.mockk:mockk-android:1.8.7" @OpenForTesting class A { fun publicFun() = privateFun() pri

我似乎无法在android测试中模拟私有函数。我还使用全开放插件进行pre-P测试。在非android测试中,它运行没有问题。我想它也应该在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()
}
androidTestImplementation“io.mockk:mockk android:1.8.7”
@开放式测试
甲级{
fun publicFun()=privateFun()
私人娱乐私人娱乐(){}
受保护的乐趣受保护的乐趣(){}
}
@试验
有趣的私密函数mock(){
val spy=spyk()
val mock=mockk()
val a=a()
val functions=a::class.functions//size->6
val spyFunctions=spy::class.functions//size->5
val mockFunctions=mock::class.functions//size->5
每个{spy[“privateFun”]()}返回单位
a、 公共娱乐()
}

异常情况下失败,因为缺少专用函数。

io.mockk.MockKException:找不到用于动态调用的函数privateFun()

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

InternalPlatformDsl.dynamicSet(autoBannerViewPagerMock,“mBannerList”,列表)
InternalPlatformDsl.dynamicSet(autoBannerViewPagerMock, "mBannerList", list)
every { autoBannerViewPagerMock.invoke("loadCoverImage") withArguments listOf(any<Int>(), any<Int>(), any<ImageView>(), any<stMetaBanner>()) } returns Unit
每个{autoBannerViewPagerMock.invoke(“loadCoverImage”)和参数列表(any()、any()、any()、any())}返回单位
感谢您的快速回复。将pre-P android上的“私有函数模拟”标记为受支持是错误的吗?谢谢莫克!它如何回答最初的问题?