0

簡単な Micronaut Kotlin コルーチンの例を作成し、kotlin-corotines-test. kotlin-corotines-test依存関係を追加しました。

を使用しようとしましrunBlockingTestたが、次のテスト(Kotest/FuncSpec) が失敗しました。

@Test
fun `test GET all posts endpoint`() = runBlockingTest {
    val response = client.exchange("/posts", Array<Post>::class.java).awaitSingle()

    response.status shouldBe HttpStatus.OK
    response.body()!!.map { it.title }.forAny {
        it shouldContain "Micronaut"
    }
}

そして、このような例外をスローします。

java.lang.IllegalStateException: This job has not completed yet
    at kotlinx.coroutines.JobSupport.getCompletionExceptionOrNull(JobSupport.kt:1190)
    at kotlinx.coroutines.test.TestBuildersKt.runBlockingTest(TestBuilders.kt:53)
    at kotlinx.coroutines.test.TestBuildersKt.runBlockingTest$default(TestBuilders.kt:45)
    at com.example.ApplicationTest.test GET posts endpoint(ApplicationTest.kt:30)

でもrunBlockingファンボディに使えば効きます。

@Test
fun `test GET all posts endpoint`() {
    runBlocking {
        val response = client.exchange("/posts", Array<Post>::class.java).awaitSingle()

        response.status shouldBe HttpStatus.OK
        response.body()!!.map { it.title }.forAny {
            it shouldContain "Micronaut"
        }
    }
}

更新: 問題Kotlin/kotlinx.coroutines#1204から解決策を取得し、 kotlin コルーチンを 1.6.0-RC に更新して解決しrunTest、非推奨の代わりに使用しrunBlockingTestます。

4

1 に答える 1