在启动所有单元测试之前调用一次 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()
}