在启动所有单元测试之前调用一次 startKoin() 并在所有测试完成后调用一次 stopKoin()
Calling startKoin() once before launching all unit tests and stopKoin() once after all tests finish
我有几个测试 classes 实现 KoinTest
接口,并且在每个测试中我都有相同的代码:
@Before
fun setUp() {
startKoin { modules(appModule) }
}
@After
fun tearDown() {
stopKoin()
}
是否可以在所有这些测试之前调用 startKoin()
,并在测试调用之后调用 stopKoin()
,这样我就可以从每个测试中删除上面的代码 class ? 或者出于某种原因强烈建议不要这样做?
我看到他们在 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()
}
}
}
}
创建实现 KoinTest
接口的 BaseKoinTest
并将规则添加到此 class。所有需要 Koin
的测试 classes 都可以从这个 class.
扩展
abstract class BaseKoinTest : KoinTest {
@get:Rule
val koinTestRule = KoinTestRule()
}
我有几个测试 classes 实现 KoinTest
接口,并且在每个测试中我都有相同的代码:
@Before
fun setUp() {
startKoin { modules(appModule) }
}
@After
fun tearDown() {
stopKoin()
}
是否可以在所有这些测试之前调用 startKoin()
,并在测试调用之后调用 stopKoin()
,这样我就可以从每个测试中删除上面的代码 class ? 或者出于某种原因强烈建议不要这样做?
我看到他们在 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()
}
}
}
}
创建实现 KoinTest
接口的 BaseKoinTest
并将规则添加到此 class。所有需要 Koin
的测试 classes 都可以从这个 class.
abstract class BaseKoinTest : KoinTest {
@get:Rule
val koinTestRule = KoinTestRule()
}