Kotlin/JSでsuspend関数をテストする
Kotlin/JSでsuspend関数をテストする
Kotlin/JSではrunBlocking
のようにsuspend(非同期)関数を同期関数に変換できる関数が使えない。JavaScriptのランタイムで実現できないためだ。そしてkotlin-testでは@Test
アノテーションをsuspend関数に適用できない。
// e:/path/to/source.kt: Unsupported [suspend test functions]
@Test suspend fun foo() {
...
}
その結果として、Kotlin/JSではsuspend関数がテストできなかった。これは割と大きな問題で、結局テストはKotlin/JVMでしか動かさない、みたいな状況に陥りがちだった。
この状況が、今日リリースされたkotlinx.coroutines 1.6.0のリリースで変わってくるかもしれない。kotlinx.coroutinesの目玉機能のひとつとしてトップバッターで紹介されているのがkotlinx-coroutines-test
だ。
coroutines 1.6.0を使うと、新たにrunTest { ... }
というブロックでsuspend関数を呼び出すことが可能になる。テストの実行は投げっぱなしにならず同期的に終了してくれる。
@Test fun foo() = runTest {
...
}
runTest()
にはdispatchTimeoutMs
引数でタイムアウトも指定できるので、テスト対象ブロックがきちんと終了しない場合にも中断できるし、context
引数でCoroutineContext
を渡すこともできる。
これで、これまでjvmTest { ... }
にしか置けなかったテストがcommonTest { ... }
にも置けるようになるので、Multiplatformプロジェクトを作っている人は積極的に使っていくといいと思う。
Author And Source
この問題について(Kotlin/JSでsuspend関数をテストする), 我々は、より多くの情報をここで見つけました https://zenn.dev/atsushieno/articles/kotlin-runtest著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol