如何为嵌套的scala单元相等匹配器获取有意义的错误消息?

时间:2015-04-01 13:08:03

标签: scala equality scalatest matcher

我想在包含Array的case类的ScalaTest中断言相等性。 (因此案例类的内置等式匹配器不适用。) 例如:

case class Example(array: Array[Double], variable: Integer)

测试存根:

val a = Example(Array(0.1, 0.2), 1)
val b = Example(Array(0.1, 0.2), 1)
a should equal (b)

按预期失败。所以我实现了一个平等特征:

implicit val exampleEq =
new Equality[Example] {
  def areEqual(left: Example, right: Any): Boolean =
    right match {
      case other: Example => {
        left.array should contain theSameElementsInOrderAs other.array
        left.variable should be other.variable
        true
      }
      case _ => false
    }
}

哪个有效。另一种选择是在"的所有地方用==实现平等特征,应该是"如果在某个地方是假的,则返回false,否则为true。两者的问题在于,当运行测试时,我得到的错误消息是"示例"对象不相等(如果不是)但我想看看它们的区别在哪个元素。

我如何实现这一目标?

感谢您的帮助!

[更新]在实践中,示例包含多个数组和其他字段,我相应地更改了代码。

1 个答案:

答案 0 :(得分:0)

考虑使用:

left.array should contain theSameElementsInOrderAs other.array

参考:Working with "sequences"