我有几个测试类实现 KoinTest
界面,并且在每个界面中我都有相同的代码:
@Before
fun setUp() {
startKoin { modules(appModule) }
}
@After
fun tearDown() {
stopKoin()
}
是否可以调用
startKoin()
在所有这些测试之前和测试之后调用 stopKoin()
,所以我可以从每个测试类中删除上面的代码? 或者,由于某种原因,它会被强烈反对?我在 docs here 中看到了他们写了“对于每个测试,我们启动 startKoin() 并关闭 Koin 上下文 closeKoin()。”,但我不知道这是否是唯一有效的方法。
最佳答案
您可以使用 TestRule
.为 Koin
创建测试规则.
class KoinTestRule : TestRule {
override fun apply(base: Statement, description: Description): Statement {
return object : Statement() {
override fun evaluate() {
startKoin { modules(appModule) }
base.evaluate()
stopKoin()
}
}
}
}
创建 BaseKoinTest
实现 KoinTest
接口(interface)并将规则添加到此类。所有需要Koin
的测试类可以从这个类扩展。abstract class BaseKoinTest : KoinTest {
@get:Rule
val koinTestRule = KoinTestRule()
}
关于android - 在启动所有单元测试之前调用 startKoin() 并在所有测试完成后调用 stopKoin(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416051/