簡単な 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
ます。