【问题标题】:Calling startKoin() once before launching all unit tests and stopKoin() once after all tests finish在启动所有单元测试之前调用 startKoin() 并在所有测试完成后调用 stopKoin()
【发布时间】:2019-08-08 15:26:57
【问题描述】:

我有几个实现KoinTest 接口的测试类,在每个测试类中我都有相同的代码:

@Before
fun setUp() {
    startKoin { modules(appModule) }
}

@After
fun tearDown() {
    stopKoin()
}

是否可以在所有这些测试之前调用startKoin(),并在测试之后调用stopKoin(),以便我可以从每个测试类中删除上述代码?或者可能会强烈建议不要这样做出于某种原因?

我看到他们在docs here 中写了'对于每个测试,我们启动 startKoin() 并关闭 Koin 上下文 closeKoin()。',但我不知道这是否是唯一有效的方法。

【问题讨论】:

  • 我通常的目标是构造函数依赖注入,以便测试根本不需要对象图。

标签: android unit-testing kotlin junit koin


【解决方案1】:

您可以使用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 并将规则添加到此类。所有需要Koin 的测试类都可以从这个类扩展。

abstract class BaseKoinTest : KoinTest {

    @get:Rule
    val koinTestRule = KoinTestRule()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2016-08-07
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2023-04-11
    • 2020-03-04
    • 2015-01-09
    相关资源
    最近更新 更多