2

我在 kotest 中使用了 Funspec 测试风格,我得到了一个由框架自动注入的 coroutineScope,如下所示。

class MyTestSpec: FunSpec() {
    init {
        test("test event loop") {
           mySuspendedFunction() // a coroutineScope is already injected by the test framework here     
        }
    }
}

如何配置 Kotest 框架以在我的测试中使用实例kotlinx.coroutines.test.TestCoroutineScope而不是 a kotlinx.coroutines.CoroutineScope?或者有没有理由为什么这没有意义?

4

2 回答 2

4

从 Kotest 5.0 开始,内置了对TestCoroutineDispatcher. 看这里

简单地:

class MyTest : FunSpec(
  {
    test("do your thing").config(testCoroutineDispatcher = true) { 
    }
  }
)
于 2021-10-13T16:52:24.780 回答
2

像这样创建一个测试监听器:

class MainCoroutineListener(
    val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()

) : TestListener {
    override suspend fun beforeSpec(spec: Spec) {
        Dispatchers.setMain(testDispatcher)
    }

    override suspend fun afterSpec(spec: Spec) {
        Dispatchers.resetMain()
        testDispatcher.cleanupTestCoroutines()
    }
}

然后像这样在你的测试中使用它

class MyTest : FunSpec({
    listeners(MainCoroutineListener())
    tests...
})
于 2021-10-02T15:06:47.223 回答