Scalaのテスティングフレームワーク

Scala用のテスティングフレームワークにもいろいろあるようですが、まだどれを使えばいいのかよくわかっていません。Lift in Actionでもテストの章がありますが、テスティングフレームワークについてはScalaTest、Specs、ScalaCheckが紹介されていたので(ScalaCheckについてはSpecsと組み合わせて使用する例が載っていました)、この3つについて簡単に調べてみました。

ScalaTest

これが一番スタンダードっぽい?JUnit3/4やTestNGのテストケースをScalaで記述したり、BDDスタイルのテストケースを記述することができるみたい。BDDスタイルで記述する場合もいくつかのトレイトが用意されており、用途に応じて使い分けることができるようです。

Specs

こちらはBDD用のテスティングフレームワーク。MockitoやJMock、EasyMockといったモックライブラリを簡単に利用するための構文も用意されているようです。前述の通りScalaTestでもBDDスタイルの記述ができるようなので、どちらを採用するべきかは判断に迷うところです。

ScalaCheck

これは上の2つとは一味違ってテストケース(というかテストデータ)の自動生成を目的としたもの。単体でも使えるようですが、他のテスティングフレームワークと組み合わせて使うこともできるようで、Lift in ActionではSpecsと組み合わせて使う例が紹介されていました。引数のパターンの網羅が面倒なユーティリティ系のテストには便利そうです。

まとめ

SpecsはBDD専用ですが、ScalaTestはより汎用的なテスティングフレームワークのようです。基本はScalaTestかSpecsのどちらかを使い、必要に応じてScalaCheckを導入するとよさげな感じでしょうか。
ScalaTestとSpecsの違いについてはこんなQ&Aがありました。

ScalaTestのほうができることは多いので、ScalaTestを選んでおけば間違いなさそうな気もしますが、どのようなスタイルで記述するのかを予め決めておく必要がありそうです。逆にSpecsは悩む余地があまりないという意味では使いやすいと言えるかもしれません。Mockitoが使いやすいという点もSpecsの魅力の1つのようです。
時間があればそれぞれのテスティングフレームワークについて実際のコードがどんな感じになるのか掘り下げてみたいです。