如果我有一个看起来像这样的(简化的)类:
class MyManager @JvmOverloads constructor(/*constructor args*/) : MyManagerInterface {
@Inject
lateinit var myLogger: MyLogger
init {
component = DaggerLoggerComponent.builder()
.loggerModule(LoggerModule(internalLogger))
.build()
component.inject(this)
}
companion object {
lateinit var component: RemoteLoggerComponent
private set
}
}
在进行单元测试时,我到底如何模拟伴随对象中的组件?
我尝试过使用 Mockito、MockK 等各种技巧,但遇到了一些障碍。
CUT(被测类)是另一个使用 MyManager 组件在其 init block 中注入(inject)其依赖项的类,如下所示:
init {
if(applicationContext == null) {
throw IllegalStateException("Application Context must not be null")
} else {
MyManager.component.inject(this)
}
}
基本上,如果注入(inject)什么都不做,我会很高兴,因为我可以在外部设置依赖项以进行测试。
所有帮助表示赞赏。包括如果你认为我写错了。我对 Kotlin 和 Dagger 比较陌生。谢谢。
最佳答案
基本上,使用 MockK,你需要这样的代码:
mockkObject(MyManager)
every { MyManager.component.someOp(...) } returns 5
不确定我是否了解有关注入(inject)的所有细节。正如你所说,你可以禁用它。
关于Kotlin 单元测试 - 如何模拟 Companion 对象的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51792130/