Kotlinのプロジェクトにテストフレームワーク導入するのムズすぎー

mikanichinose
·

JUnit vs Kotest(旧kotlintest)

JUnit: 昔ながらのJavaのxUnit Test Framework

  • JUnit4 vs JUnit5

    • Androidプラットフォームの依存を使いたくばJUnit4を要求される

    • 非Androidプラットフォームな部分についてはJUnit5でよかろう

Kotest: Kotlin向けのTest Framework

  • なんかおしゃれ

    • テストケースの書き方が馬鹿みたいにいっぱいある

      • どれを選べばいいか迷う

    • アサーションがinfix関数なのでfluentな記述ができる

      • `1 + 1 shoudBe 2` みたいな感じ

kotest + kotlin-power-assert の統合のしにくさ

僕は数多あるアサーション関数を一切覚えたくないので power-assert の kotlin 版を使いたいです

kotest で kotlin-power-assert を使ったときのツラみは、単体のテストケースを実行したときに assert がきちんと落ちないことです(テストスイート全体を実行するとちゃんと落ちます)

理由はアサーションが有効になっていないためでした

assertの実装を見に行くとなにやらフラグらしきもので制御されています

_Assertions.ENABLEDがtrueになるには、VM Optionで -ea というのを渡さないといけないようです

では -ea はどこから渡せばよいのでしょうか

Run/Debug Configurations を開いて、 Modify options から Add VM Options を有効にし、追加されたフォームに -ea と入力すればいけます

毎回構成を変更するのは面倒なのでテンプレートに手を加えます

こうすれば常にアサーションが有効になります

JUnit5はどうやって導入するのが正解なん?

JUnit公式のサンプルではこう

https://github.com/junit-team/junit5-samples/blob/r5.10.1/junit5-jupiter-starter-gradle-kotlin/build.gradle.kts

Kotlin公式ではこう

https://kotlinlang.org/docs/jvm-test-using-junit.html#add-the-code-to-test-it

version catalogに載せるのであればこう

でもこれどっちがええの?

@mikanichinose
Androidエンジニア 普段はターミナルに生息しています