2011-07-24 39 views
9

在TestNg和Java中,我們可以使用DataProvider運行多個測試用例,並將其作爲單獨的測試運行,這意味着在測試失敗時不會停止執行測試。有沒有ScalaTest或Specs/Specs2的模擬器?具有多個測試用例的Scalatest或specs2

+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 

而下面的規格:

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 
+0

重讀我的問題。你的方法作爲一個測試運行,這意味着在一個情況下的失敗是測試失敗。在TestNg中,這將作爲三個測試運行,因此失敗信息是有意義的 – user44242

+0

對不起,從規範中只能看到它實際上正在創建3個測試。我添加了輸出來顯示。 – Eric

+0

查看更新後的語法:http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#With+sequences –

9

這個概念被稱爲「shar編輯測試「,因爲相同的測試代碼被多個燈具」共享「,其中」燈具「是TestNG DataProvider方法中的」數據「。對於ScalaTest中的每個樣式特徵,都有一種方法可以將測試表示爲函數。這裏有一個例子WordSpec:

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

您也可以只使用一個for循環來註冊不同的數據點相同的測試代碼。這在一封電子郵件中討論這是這裏想出了:

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次的測試中,每個瀏覽器驅動器五個測試。我相信這就是你所追求的。

相關問題