是否有任何方便的方式在多個數據集上執行測試 - 就像在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
- 2. 使用RapidMiner中的測試數據集
- 3. 對測試數據集使用cross_val_predict
- 4. Scalatest - 如何測試println
- 5. 將測試標記爲scalatest
- 6. Go - 集成測試使用測試數據庫連接
- 7. 使用核心數據添加多個測試數據
- 8. 如何在scalatest中禁用測試?
- 9. 數據庫集成測試
- 10. 圖像測試數據集
- 11. 使用數據驅動的測試處理大型數據集
- 12. 使用迴路,用於在數據幀中的多個測試
- 13. 使用多個測試進行參數化junit測試
- 14. ScalaTest:測試具有多個瀏覽器的網絡應用程序
- 15. 如何使用Rapidminer測試測試集?
- 16. 在數據框內做多個測試。
- 17. django單元測試多個數據庫
- 18. 編寫集成測試,測試數據庫,Web服務調用
- 19. Scalatest Maven插件「沒有執行測試」
- 20. Scala - ScalaTest:測試時模擬輸入
- 21. PlayFramework ScalaTest測試網頁與硒
- 22. ScalaTest:有條件地忽略WordSpec測試
- 23. ScalaTest:瞭解測試執行順序
- 24. 沒有夾具的ScalaTest測試名稱?
- 25. 單元測試中的HSQLDB(Scalatest/JUnitRunner)
- 26. ScalaTest thrownBy測試異常消息
- 27. 在RDLC中使用多個數據集
- 28. 使用R收集數據 - 多個URL
- 29. 使用Weka預測測試數據集中的文本數據標籤?
- 30. 如何在ScalaTest測試中正確使用Spark?
我想看看Scalacheck,它可以從Scalatest中使用。 – 2011-03-20 23:35:45