android - 在启动所有单元测试之前调用 startKoin() 并在所有测试完成后调用 stopKoin()

标签 android unit-testing kotlin junit koin

我有几个测试类实现 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/

相关文章:

kotlin - 在Kotlin中渲染json响应

android - AWS Amplify - Android - 将未知语言的文本翻译成英语

java - 将 Spinners 的文本发送到邮件

android - 如何获取水平 ScrollView 焦点元素的索引

java - 如何在android中的viewpager上从右到左获取上一个 fragment

.net - 犀牛模拟中的部分参数匹配

android - 使用 Parcelable 将对象从一个 android Activity 传递到另一个

javascript - Sinon.JS 的 stub.callsArg(index) 是做什么的?

angularjs - 测试 modalInstance.result.then

java - 通过 ID 分配两个数组