書いたテストコードのうち、特定のテストケースだけ実行したいという場面は結構あります。
specs2では特定のテストクラス内のテストケースのみを実行することはtestOnlyでできることが割と知られていますが、テストケース名を指定して実行する方法は日本語の情報が全くなかったのでここにまとめておきます。
例
テスト対象
TestSpec.scala
import org.specs2.mutable._
class TestSpec extends Specification {
"テストの名前A" in {
1 must_== 1
}
"テストの名前B" in {
1 must_== 1
}
"また別のテスト" in {
1 must_== 1
}
}
実行方法
sbt "testOnly TestSpec -- ex テストの名前A"
補足情報
1. テスト名は正規表現で指定
テスト名は正規表現で表現しているため、例えば以下のような指定をすることで「テストの名前」という文字列から始めるテストすべてを実行することができます。
正規表現
sbt "testOnly TestSpec -- ex テストの名前.*"
2. テスト名にホワイトスペースが含まれる場合
テスト名がホワイトスペースを含んでいる場合、正規表現の前後へエスケープしたダブルクォートを置いてください(これは同じ会社の人が見つけてくれました)
ホワイトスペース
sbt "testOnly TestSpec -- ex \"空白 の 含まれる テスト名\""
制限(これでもできないこと)
shouldやcanや>>などでテストを構造化してる場合、特定のshould以下のテストのみを実行したいケースが有りますが残念ながら今のところこれらの構造部品は名前指定できないようです。どうしても特定should以下のテストだけを実行したい場合、タグを利用してscala + specs2 + sbt で特定のクラスの中のさらに特定のテストだけ実行したい - Yamashiro0217の日記で書かれてるように実行しましょう。
より詳しい仕様
- Specs2 Runners - specs2公式ドキュメント