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

如何为嵌套的scala单元相等匹配器获取有意义的错误消息?,scala,equality,scalatest,matcher,Scala,Equality,Scalatest,Matcher,我想在包含数组的case类的ScalaTest中断言相等。因此,case类的内置相等匹配器不适用。 例如: 测试存根: 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,

我想在包含数组的case类的ScalaTest中断言相等。因此,case类的内置相等匹配器不适用。 例如:

测试存根:

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
    }
}
这很有效。另一个选项是在should be的所有位置使用==实现相等特性,如果在一个位置为false,则返回false,否则返回true。两者的问题是,在运行测试时,我得到一条错误消息,即如果两个示例对象不相等,那么它们就不相等,但我想看看它们在哪个元素上不同

我如何做到这一点

谢谢你的帮助

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

考虑使用:

left.array should contain theSameElementsInOrderAs other.array

参考:。

谢谢您的回复,我考虑过这个问题,但拒绝了,因为我的类中有多个字段,例如10,我不想为每个检查写10个应该语句。@DreamFlash可能我不清楚-不确定。我的意思是建议替换left.array.length应该是other.array.length,因为我啊,谢谢你,现在它有意义了,是的,你是对的,我不应该自己比较元素,而是使用数组比较。但我仍然没有发现错误?我相应地改变了问题,现在它更有意义了吗?
left.array should contain theSameElementsInOrderAs other.array