是否有任何方便的方式在多個數據集上執行測試 - 就像在JUnit的參數化測試中一樣?使用ScalaTest測試多個數據集
回答
測試ScalaTest 1.5中的多個數據集有一項新功能,您可以將其作爲快照進行嘗試。它被釋放在scala-tools.org:
組ID:org.scalatest 工件ID:scalatest 版本:1.5快照
您在混合(或導入的成員)TableDrivenPropertyChecks,那麼你就可以定義這樣的表:
val examples =
Table(
("a", "b", "c", "d"),
( 1, 1, 1, 1),
( 1, 1, 1, 1),
( 1, 1, 1, 1),
( 1, 1, 1, 1)
)
您將元組的var arg列表傳遞給Table。每個元組都必須具有相同的元組,在這種情況下,每個元組都有4個元素(4個成員)。第一個元組是所有字符串,並且這些定義了列的名稱。隨後的元組每個定義一行數據。您可以將任何類型放入元組中,但通常每列都會包含相同的類型。雖然如果你想要的話,你可以有任何可以包含任何東西的類型的列。你可以有1到22列的表格。如果你需要超過22列(Scala中的最大元組大小是22),你可以做的是在一列或多列中使用複合類型。
一旦你有一個表,你可以用FORALL檢查它們是這樣的:
forAll (examples) { (a, b, c, d) =>
a + b + c + d should equal (4)
}
FORALL需要兩個參數列表。第一個是表格,第二個是「屬性函數」,表示表格的每一行應該是真的。 forAll將佔用表中的每一行(當然,跳過列名稱的標題行)並確保該屬性成立。如果沒有,你會得到一個很好的錯誤信息,說明表中的哪一行失敗,指定列的值是多少,等等。
表是數據元組的一個序列,所以你也可以使用它就像一個Seq。例如,你可以得到選項[異常]表示的序列的行未能像這樣:
for ((a, b, c, d) <- examples) yield {
failureOf { a + b + c + d should equal (4) }
}
得到的序列包含在表中,這是一個無如果屬性傳遞數據的每一行一個選項對於那一行,以及一些[異常]如果屬性失敗。 Some中的例外包含關於失敗的所有細節。
Shared tests對您而言可能很有趣。他們允許你定義一些組測試就像這個堆棧的例子:
def nonEmptyStack(stack: Stack[Int], lastItemAdded: Int) {
"be non-empty" in {
assert(!stack.empty)
}
"return the top item on peek" in {
assert(stack.peek === lastItemAdded)
}
"not remove the top item on peek" in {
val size = stack.size
assert(stack.peek === lastItemAdded)
assert(stack.size === size)
}
"remove the top item on pop" in {
val size = stack.size
assert(stack.pop === lastItemAdded)
assert(stack.size === size - 1)
}
}
,然後在實際的規格,你可以使用它像這樣:
behave like nonEmptyStack(stackWithOneItem, lastValuePushed)
因此,換句話說,nonEmptyStack被參數化可以使用您想要測試的不同數據集的一組測試。
另一種可能性爲數據驅動測試是使用下面的語法:
class SampleTest extends FunSuite {
val input = List((1, 1), (4, 2), (9, 3))
input.foreach{i =>
test(s"Test of math.sqrt(${i._1})") {
assert(math.sqrt(i._1) === i._2)
}
}
}
測試默認並行執行,除非你build.sbt設置parallelExecution in Test := false
。
- 1. 如何使用ScalaTest測試Dao對象
- 2. 使用ScalaTest測試AKKA演員
- 3. 一次標記許多測試中ScalaTest
- 4. 具有多個測試用例的Scalatest或specs2
- 5. 對測試數據集使用cross_val_predict
- 6. 使用RapidMiner中的測試數據集
- 7. Scalatest - 如何測試println
- 8. 將測試標記爲scalatest
- 9. ScalaTest:運行測試50次
- 10. 運行ScalaTest測試並行
- 11. - [R預測函數在測試數據集不使用整個數據,僅使用部分數據和預測
- 12. Go - 集成測試使用測試數據庫連接
- 13. 使用ScalaTest運行單個測試套件
- 14. 使用核心數據添加多個測試數據
- 15. 如何在scalatest中禁用測試?
- 16. ScalaTest afterAll()在每次測試後調用
- 17. 圖像測試數據集
- 18. 數據庫集成測試
- 19. 使用數據驅動的測試處理大型數據集
- 20. 使用Java Rally Rest API向測試集添加200多個測試用例
- 21. 使用相同的集成測試測試多個Android應用程序?
- 22. 集成測試/單元測試:做了太多集成測試?
- 23. 使用迴路,用於在數據幀中的多個測試
- 24. 使用多個測試進行參數化junit測試
- 25. FeignClient集成測試使用測試雙
- 26. 如何使用Rapidminer測試測試集?
- 27. ScalaTest:測試具有多個瀏覽器的網絡應用程序
- 28. 用1個測試測試多個類
- 29. 編寫集成測試,測試數據庫,Web服務調用
- 30. 多個數據庫的測試和database_cleaner
我想看看Scalacheck,它可以從Scalatest中使用。 – 2011-03-20 23:35:45