kotlin - 如何使用 MockK 在 android 测试中模拟私有函数?
问题描述
我似乎无法在 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()
解决方案
子类化用于为 pre-P android 仪器测试创建模拟和间谍。这意味着基本上会跳过私有方法,因为无法继承它们。这样计数器不计算私有方法。
推荐阅读
- java - 尝试提取当前微调器项时出现 Kotlin UninitializedPropertyAccessException
- android - 当应用程序被杀死时,AlarmManager 不会一直工作
- arrays - 无法将数据从文件复制到结构数组 (c)
- python - Dataproc 退出代码 247
- cytoscape.js - cytoscape.js 中是否有边缘加权弹簧嵌入式布局?
- c - 在C语言中以日期为dd/mm/yy并以“合法”形式显示日期
- python - 将 RAPIDS CUML 随机森林模型部署到无法安装 RAPIDS/CUML 的 Windows 虚拟机
- python - 可以在 Python API 中参数化查询名称变量吗?
- python - 如何调试在 Docker 容器中运行的 Flask 应用程序?
- reactjs - 与主页相同的新页面反应