如何解决使用Koin进行正确的仪器测试
无法使此东西正常工作。
- 我已在测试运行器下注册了自定义测试应用程序:
class HelloInstrumentationTestRunner : AndroidJUnitRunner() {
override fun newApplication(
cl: ClassLoader?,className: String?,context: Context?
): Application {
return Instrumentation.newApplication(HelloTestApp::class.java,context)
}
}
- 我的应用程序实例像往常一样启动koin:
startKoin {
androidLogger()
androidContext(applicationContext)
fragmentFactory()
modules(appModule + viewModelsModule)
}
- 问题1:在我的测试中,我无法进行
stopKoin()
(例如未配置Koin上下文。请使用startKoin或koinApplication DSL) - 问题2:当我尝试通过@After中的unloadKoinModules / loadKoinModules解决此问题时,我在后续测试方法中的
declareMock
不再起作用。
所有这些问题基本上是因为应用程序实例在测试之间仍然存在,因此,在android应用程序实例内部配置的图形在测试之间也仍然存在。我需要不要发生这种情况,或者至少要有能力在两次测试之间修改图形。
解决方法
已解决。
- 我必须设置替代模块:
val overrideModule = module(override = true) {
single<Repository1> {
mock(Repository1::class.java)
}
single { Repository2(get(),get()) }
single<Repository3> {
mock(Repository3::class.java)
}
...
}
- 在我的@BeforeTest中,我现在做
loadKoinModules(overrideModule)
- 在我的@AfterTest中,我进行
unloadKoinModules(overrideModule)
- 在测试中,我现在可以做:
given(get<Repository1>().magicCall()).willReturn(
MagicData(
"1111",Calendar.getInstance().timeInMillis
)
)
无需处理stopKoin之类的东西,超级简单!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。