gpt4 book ai didi

scala - 使用 ScalaTest 测试多个数据集

转载 作者:行者123 更新时间:2023-12-04 05:00:53 25 4
gpt4 key购买 nike

有没有什么方便的方法可以在多个数据集上执行测试——比如在 JUnit 的参数化测试中?

最佳答案

ScalaTest 1.5 中有一项用于测试多个数据集的新功能,您目前可以将其作为快照进行尝试。它在 scala-tools.org 上发布:

组 ID:org.scalatest
工件 ID:scaltest
版本: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 个成员)。第一个元组都是字符串,这些定义了列的名称。随后的元组每个定义一行数据。您可以在元组中放置任何类型,但通常每列将包含相同的类型。但是,如果您愿意,您可以拥有可以包含任何内容的 Any 类型的列。您可以拥有 1 到 22 列的表。如果您需要超过 22 列(Scala 中的最大元组大小当前为 22),您可以做的是在一列或多列中使用复合类型。

一旦你有了一张表,你可以像这样使用 forAll 来检查它们:
forAll (examples) { (a, b, c, d) =>
a + b + c + d should equal (4)
}

forAll 需要两个参数列表。第一个是表,第二个是“属性函数”,它表示表的每一行都应该为真。 forAll 将获取表格的每一行(当然,跳过列名的标题行)并确保该属性成立。如果没有,您会收到一条很好的错误消息,说明表的哪一行失败,命名列的值是什么等等。

Table 是数据元组的 Seq,因此您也可以像 Seq 一样使用它。例如,您可以获得 Option[Exception] 的 Seq 指示哪些行失败,如下所示:
for ((a, b, c, d) <- examples) yield {
failureOf { a + b + c + d should equal (4) }
}

生成的 Seq 包含表中每一行数据的一个 Option,如果为该行传递了属性,则为 None,如果该属性失败,则为 Some[Exception]。 Some 中的异常包含有关失败的所有详细信息。

关于scala - 使用 ScalaTest 测试多个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com