🕌
Property Based Testについてざっくり調べてみた
知るきっかけとなった記事はこちら
Oracle さんがめっちゃ分かりやすい記事をだしていたので、
この記事では本当にざっくりとした情報に留めます
ざっくり
- 関数の入力値に着目
- ランダムにデータを生成して行うテスト
- データ生成にあたり、入力値(プロパティ)の性質を定義する
- エッジケースや境界条件もカバーしやすい
設計・実装してこれでいけるでしょ、、、からのテストやってみたら全然カバーできてない
というのはあるあるだと思うんですが、精度を上げつつ保守もしやすくなるというわけですね
どうやってやるの
言語ごとにライブラリがあるのでそれを使いましょう
Java, Kotlin: jpwik
Haskell: QuickCheck
Scala: scalaprops、ScalaCheck
JavaScript, TypeScript: fast-check
Python: hypothesis
Go: gopter
考慮しておいたほうがいいこと
ランダムなデータ生成はされる一方で再現性も担保しておきたい
なので、ランダムシードを管理しておくなどの工夫が必要そう
あとはビジネスルールとか特定のドメイン知識的なものについては
どうやって表現するかとか、そこらへんの工夫も必要そう
(テスト設計に熟練してるわけじゃないので、ほんと気がする程度の解像度ですが、、)
Discussion