前回の記事の続き...
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でもサポートされています。