如果您匹配列表或 map 或任何其他复杂结构,那么查看给出的值和预期的值之间的差异将很有用。例如:
Map("a" -> 1, "b" -> 2, "c" -> 3) should equal Map("a" -> 1, "b" -> 5, "c" -> 3)
// ScalaTest output:
[info] Map("a" -> 1, "b" -> 2, "c" -> 3) did not equal Map("a" -> 1, "b" -> 5, "c" -> 3) (Test.scala)
[info] org.scalatest.exceptions.TestFailedException:
[info] ...
您必须手动浏览两个 map 以找到它们之间的差异,您的收藏越大,难度就越大。
另一方面,在RSpec中,您将获得:
expect({a: 1, b: 2, c: 3}).to match({a: 1, b: 5, c: 3})
// RSpec output:
Failure/Error: it { expect({a: 1, b: 2, c: 3}).to match({a: 1, b: 5, c: 3})}
expected {:a=>1, :b=>2, :c=>3} to match {:a=>1, :b=>5, :c=>3}
Diff:
@@ -1,4 +1,4 @@
:a => 1,
-:b => 5,
+:b => 2,
:c => 3,
# ./spec/test_spec.rb:2:in `block (2 levels) in <top (required)>'
ScalaTest是否可能有类似的东西?
最佳答案
我不相信有什么与您描述的完全一样。您在ScalaTest中获得的最接近的是String
的内置差异。
这不是理想的方法,但是在 map 的末尾添加toString
将提供更好的输出。同样,在pretty
上使用org.scalautils.PrettyMethods
方法也可以完成相同的操作。
例如:
Map("a" -> 1, "b" -> 2, "c" -> 3).toString shouldBe Map("a" -> 1, "b" -> 5, "c" -> 3).toString
// scalatest output
[info] "Map(a -> 1, b -> [2], c -> 3)" was not equal to "Map(a -> 1, b -> [5], c -> 3)"
[info] org.scalatest.exceptions.TestFailedException: ...
这个scalatest-users email thread提出了一个与您类似的问题,并收到了ScalaTest的作者Bill Venners的答复。
关于scala - 如何显示ScalaTest中给定和预期的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28528785/