2011-07-24 9 views
9

TestNgとJavaでは、DataProviderを使用して複数のテストケースを実行できます。これは別々のテストとして実行されます。 ScalaTestやSpecs/Specs2のアナログはありますか?複数のテストケースを持つスカラテストまたは仕様2

+0

質問が混乱しています。あなたは何を意味するのかの例を提供してください。 –

答えて

24

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 

A basket must contain fruits 
+ it contains: apple 
x it contains: cake 
    'basket' does not contain 'cake' 
+ it contains: orange 
+0

私の質問を読んでください。メソッドは1つのテストとして実行されます。つまり、あるケースの失敗はテストの失敗です。 TestNgではこれは3つのテストとして実行されるため、失敗情報は意味があります – user44242

+0

実際には3つのテストしか作成していないことは明らかではありません。私はそれを示すために出力を加えました。 – Eric

+0

更新された構文については、次を参照してください。http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#With+sequences –

9

class BasketSpecification extends Specification { 

    "a basket must contain fruits" >> { 
     Seq(apple, cake, orange) foreach { fruit => 
     ("it contains: " + fruit) >> { 
      basket must contain(fruit) 
     } 
     } 
    } 
    } 

のようなものを出力しますそのコンセプトは「シャー」同じテストコードがTestNGのDataProviderアプローチの「データ」である複数のフィクスチャによって「共有」されているため、ScalaTestの「ed tests」を使用しています。テストを関数として表現するScalaTestの各スタイル特性についてこれを行う方法があります。ここではWordSpecのための例です:あなたはその代わりに、単に異なるデータポイントで同じテストコードを登録するためにforループを使用することができます

http://www.scalatest.org/scaladoc-1.6.1/#[email protected]

。その場合には

http://groups.google.com/group/scalatest-users/browse_thread/thread/7337628407b48064#

ザループコードのように見えた:これはここにある電子メールの議論の中で思いついた

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つのテストを登録します。これは私があなたが何をしているのかと信じています。

関連する問題