前回の記事の続き...
ScalaCheckで書かれたテストには、色々な起動方法が提供されていますが、他のテストと同じようにsbtのtestコマンドで起動できた方が便利です。
import org.scalacheck._ object ExampleTest extends Properties("String") { property("startWith") = Prop.forAll { (a: String, b: String) => (a + b).endsWith(b) } }
ScalaCheckには、sbtのtesting interfaceを継承したRunnerが提供されているので、Propertiesクラスを継承したテストクラスに、個々のテストをpropertyで定義しておけば、sbtのtestコマンドでテストが実行されます。
[info] + String.startWith: OK, passed 100 tests. [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] Total time: 3 s, completed Jul 22, 2023, 4:27:10 PM
ただ、完全にScalaCheckだけでライブラリのテストが完結する、というシチュエーションはあまり無いので、既存のテスティングフレームワークの中でScalaCheckのテストを実行する方法が用意されています。
AirSpec
wvlet.airspec.spi.PropertyCheckが、forAllのラッパー関数を提供しているので、そのままScalaCheckの記法と変わらず書けますし、独自のアサーションも使えます。
munit
munit.ScalaCheckSuiteがpropertyのラッパー関数を提供しているので、そのままScalaCheckの記法と変わらず書けますし、独自のアサーションも使えます。
その他、specs2や、ScalaTestでもサポートされています。