TestNgとJavaでは、DataProviderを使用して複数のテストケースを実行できます。これは個別のテストとして実行されます。つまり、失敗してもテストの実行は停止されません。ScalaTestまたはSpecs/Specs2の類似物はありますか?
3 に答える
ScalaTest と specs2 の両方で、実行時にテスト ケースを作成して、データでパラメータ化するのは簡単です。specs2 の例を次に示します。
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, banana, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
出力は次のとおりです。
A basket must contain fruits
+ it contains: apple
+ it contains: banana
+ it contains: orange
一方、次の仕様:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, cake, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
次のようなものが出力されます。
A basket must contain fruits
+ it contains: apple
x it contains: cake
'basket' does not contain 'cake'
+ it contains: orange
同じテストコードが複数のフィクスチャによって「共有」されているため、この概念はScalaTestでは「共有テスト」と呼ばれます。「フィクスチャ」はTestNGのDataProviderアプローチの「データ」です。テストを関数として表現するScalaTestのスタイル特性ごとにこれを行う方法があります。WordSpecの例を次に示します。
http://www.scalatest.org/scaladoc-1.6.1/#org.scalatest.WordSpec@SharedTests
または、forループを使用して、異なるデータポイントに同じテストコードを登録することもできます。これは、ここにある電子メールディスカッションで出てきました:
http://groups.google.com/group/scalatest-users/browse_thread/thread/7337628407b48064#
その場合のforループコードは次のようになります。
for (browser <- List("IE", "Chrome", "Firefox")) {
test(browser + ": test one") { driver =>
info("Testing using " + driver)
}
test(browser + ": test two") { driver =>
info("Testing using " + driver)
}
test(browser + ": test three") { driver =>
info("Testing using " + driver)
}
test(browser + ": test four") { driver =>
info("Testing using " + driver)
}
test(browser + ": test five") { driver =>
info("Testing using " + driver)
}
}
}
これにより、実際には15のテストが登録され、ブラウザードライバーごとに5つのテストが登録されます。これがあなたが求めているものだと私は信じています。