gpt4 book ai didi

arrays - 是否可以使用 assertResult 在 ScalaTest 中检查数组是否相等

转载 作者:行者123 更新时间:2023-12-01 15:33:11 25 4
gpt4 key购买 nike

验证scala集合的期望值时,assertResult方法很方便:

"The list" should "be generated correctly" in {
assertResult(List(10, 20)) {
//Some code that should output
List(10, 20)
}
}

如果出现问题,会生成很好的错误消息:

Expected List(10, 20), but got List(10, 30)

不幸的是,它不适用于数组,因为 == 运算符检查的是同一性,而不是相等性(此行为背后的原因已被讨论过很多,例如此处:Why doesn't Array's == function return true for Array(1,2) == Array(1,2)?)。

因此,类似的数组检查会生成以下错误消息:

Expected Array(10, 20), but got Array(10, 20) 

当然,可以使用 should equal 匹配器:

"The array" should "be generated correctly" in {
Array(10, 20) should equal {
//Some code that should output
Array(10, 20)
}
}

但在我看来,它不太方便,因为它更像是一种等式检查而不是期望验证:

Array(10, 20) did not equal Array(10, 30)

ScalaTest 中是否有对数组的断言检查,可以清楚地将预期结果与实际结果分开?

最佳答案

哇,好吧,我实际上认为这是一个错误,因为它与其余断言不一致。不过,这个错误已经存在了大约六七年未被发现。我会修复它,但您在此期间可以做的是调用 .deep。这就是你为 == 使用数组所做的,例如:

scala> Array(1, 2) == Array(1, 2)
res12: Boolean = false

scala> Array(1, 2).deep == Array(1, 2).deep
res13: Boolean = true

scala> assertResult(Array(1, 2)) { Array(1, 2) }
org.scalatest.exceptions.TestFailedException: Expected Array(1, 2), but got Array(1, 2)
...

scala> assertResult(Array(1, 2).deep) { Array(1, 2).deep }

关于arrays - 是否可以使用 assertResult 在 ScalaTest 中检查数组是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880988/

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