LoginSignup
2
3

Kotlin+JUnit4でもProperty Based Testingがしたいんじゃ!!!

Posted at

この記事3行まとめ

  1. androidでPBTをしたい!!
  2. kotestは依存がでかすぎるんじゃ!!
  3. いいライブラリみつからないねぇ・・・・

PBT(Property Based Testing)とは

PBTとは自動テストの手法の一つでシステムのあるべき挙動を満たす条件(Property)を定義し、その条件を満たすであろう入力をランダムに自動生成し実行することで想定していない挙動をしないかどうか検証する手法です。
従来のテスト手法ではテストケースを事前に手動で作成する必要があり、テストケースを網羅的に作成することは大変です。
PBTではテストケースを自動生成するため、テストケースの作成にかかる工数と時間を削減することができます。また、ランダムな入力を生成するため、想定していない入力によるバグを検出しやすくなります。

メリット

  • テストケースの作成にかかる工数と時間を削減できる
  • 想定していない入力によるバグを検出しやすくなる

デメリット

  • プロパティの定義が難しい
    • テスト対象のシステムのあるべき挙動を満たす条件(プロパティ)を定義する必要がある
    • プロパティを適切に定義できなければ、想定していない入力によるバグを検出できない可能性がある
  • テストの実行時間が長くなることがある
    • ランダムな入力を生成するため、テストの実行時間が長くなることがある
  • 想定外の入力によるバグを検出できないことがある
    • プロパティを満たす入力を生成するため、想定外の入力によるバグを検出できない可能性がある

android = Kotlin + JUnit4

要件

  1. JUnit4でうごくこと
    1. androidのテストをJUnit5で動かすのはあれこれ設定がめんどい
    2. composeやDaggerのテストなどはJUnit4向けに実装されている
  2. KotlinフレンドリーなAPIであること
    1. andoridの第一言語はKotlinなので
  3. なるべくPrimitiveなテストをかけること
    1. Testingライブラリへの依存がでかいとTestingライブラリのバグがあった際が大変
  4. (Optional) Robolectric環境下でも動くこと

エントリー

1. Kotest

ここがいい!

Kotlin + PropetyBasedTestといえばこれ
乱数生成器がいろいろ用意されていてよい
assertionもいろいろ用意されていてよい
android用のextensionもいくつか用意されていてよい
KMPでも動かせる!最高!

ここがいまいち!

JUnit4 + Robolectricで動かすにはDeperecatedになったライブラリを自前でカスタマイズする必要がある
ライブラリが大きいためKotest側のバグにより困る場面がある

2. jqwik

ここがいい!

JUnitのEngineを上手に拡張していてPrimitiveに見えるように使える
Kotlinでも使いやすいAPI

ここがいまいち!

JUnit5向け

3. jPopulator

ここがいい!

乱数生成器としてはかなりPrimitive

ここがいまいち!

JavaBean向けのライブラリ
メンテナンス止まっている
fork元のEasy Randomもメンテナンスモードに入っている

4. junit-quickcheck

ここがいい!

JUnit4向け!

ここがいまいち!

テストランナーをJUnitQuickcheckにする必要があるためAndroidJUnit4RobolectricTestRunnerとかち合う
メンテナンス止まっている

5. QuickTheories

ここがいい!

JUnit4向け!
実装がPrimitive!

ここがいまいち!

KotlinフレンドリーなAPIじゃない
メンテナンス止まっている

6. QuickCheck

ここがいい!

JUnit4向け!
実装がPrimitive!

ここがいまいち!

KotlinフレンドリーなAPIじゃない
メンテナンス止まっている
VCSが見つからない・・・・・

まとめ

androidはいつまでJUnit4にとらわれるんだ・・・・・・・
心の中のマリーアントワネットが囁くんです、無ければ作ればいいじゃないと・・・・

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3