scala中的数组断言
Assertion with Array in scala
我正在尝试断言条件但出现错误。
我有 Either[CaseClass[Array[String]]] 类型的结果,其值为:Right(CaseClass(Array("value")))
当我这样做时:
result should equal(Right(CaseClass(Array("value"))))
它给了我:
Right(CaseClass([Ljava.lang.String;@6ed4e733) did not equal Right(CaseClass([Ljava.lang.String;@43553bf0))
Array
不是 真正的 Scala 集合并且行为不同,例如
List(42) == List(42) // true
Array(42) == Array(42) // false
我们看到数组没有在结构上进行比较。现在 ScalaTest 确实为 Array
提供了特殊处理,这确实会在结构上比较它们
Array("") should equal (Array("")) // pass
但是当 Array
嵌套在另一个容器中时它不起作用
case class Foo(a: Array[String])
Foo(Array("")) should equal (Foo(Array(""))) // fail
真正的 Scala 集合,例如 List
,不会遇到这个问题
case class Bar(a: List[String])
Bar(List("")) should equal (Bar(List(""))) // pass
有一个未解决的问题 Matchers fail to understand Array equality for Arrays wrapped inside a container/collection #491 来解决 Array
的深度相等性检查,但是现在我建议切换到 List
而不是 Array
。另一种选择是提供您自己的自定义相等性,旨在处理您的特定情况。
我正在尝试断言条件但出现错误。
我有 Either[CaseClass[Array[String]]] 类型的结果,其值为:Right(CaseClass(Array("value")))
当我这样做时:
result should equal(Right(CaseClass(Array("value"))))
它给了我:
Right(CaseClass([Ljava.lang.String;@6ed4e733) did not equal Right(CaseClass([Ljava.lang.String;@43553bf0))
Array
不是 真正的 Scala 集合并且行为不同,例如
List(42) == List(42) // true
Array(42) == Array(42) // false
我们看到数组没有在结构上进行比较。现在 ScalaTest 确实为 Array
提供了特殊处理,这确实会在结构上比较它们
Array("") should equal (Array("")) // pass
但是当 Array
嵌套在另一个容器中时它不起作用
case class Foo(a: Array[String])
Foo(Array("")) should equal (Foo(Array(""))) // fail
真正的 Scala 集合,例如 List
,不会遇到这个问题
case class Bar(a: List[String])
Bar(List("")) should equal (Bar(List(""))) // pass
有一个未解决的问题 Matchers fail to understand Array equality for Arrays wrapped inside a container/collection #491 来解决 Array
的深度相等性检查,但是现在我建议切换到 List
而不是 Array
。另一种选择是提供您自己的自定义相等性,旨在处理您的特定情况。