如果您匹配列表或 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/

10-12 17:08