【发布时间】:2021-11-09 18:21:03
【问题描述】:
我有一个类(A 类),为了组织问题,我在另一个类(B 类)的伴随对象中定义了一个扩展函数(A.extension())。
在我的测试中我需要:
- 使用真实的 A 类实例。
- 模拟 A.extension()。
- 使用 B 类的模拟实例。
使用 MockK-library 我无法成功模拟该扩展功能。 我试过了:
mockkObject(B.Companion) {
every { any<A>().extension() } returns whatIneed
}
结果:尝试运行未模拟版本的扩展函数。
mockkStatic(path.to.B.CompanionKt)
every { any<A>().extension() } returns whatIneed
结果:它没有找到伴侣对象。
mockkStatic(A::extension) {
every { any<A>().extension() } returns whatIneed
}
结果:编译错误 -> 'extension' 同时是一个成员和一个扩展。不允许引用此类元素。
我是否遗漏了一些关于如何模拟这个的东西? 我在阻止这种模拟的代码结构方面做错了吗?
感谢任何帮助。
【问题讨论】:
-
A.extension()是否在 B 类本身以外的任何地方使用? -
是的,它实际上只是为了组织目的,因为 B 是一个存储库类,而 A.extension() 基本上是对 A 实例进行数据库操作的语法糖。
-
那为什么要在B类中添加这样的扩展呢?如果有其他类调用它,为什么不将它添加到 A 类中?
标签: unit-testing kotlin mocking mockk extension-function