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つのテストが登録されます。これがあなたが求めているものだと私は信じています。