我试图比较Scala中包含数组的元组作为一些测试的一部分,并遇到一个似乎比较数组对象而不是内容的问题.
比较数组本身工作正常; 这传递:
assertResult(Array[Byte](0.toByte, 2.toByte))(Array[Byte](0.toByte, 2.toByte))
Run Code Online (Sandbox Code Playgroud)
但是,当我将数组放入一个元组,与一个long配对时,我得到一个例外
这是测试代码:
assertResult((12345678L, Array[Byte](0.toByte, 2.toByte)))((12345678L, Array[Byte](0.toByte, 2.toByte)))
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
org.scalatest.exceptions.TestFailedException: Expected (12345678,[B@2473d930), but got (12345678,[B@35047d03)
Run Code Online (Sandbox Code Playgroud)
从它打印出数组的内存位置的方式来看,它让我觉得它是在比较对象引用而不是深入比较数组中的每个对象.
这是Scala中的预期,还是我在这里做错了什么?谢谢阅读.
如果你调用它会工作deep在ArrayS:
assertResult((12345678L, Array[Byte](0.toByte, 2.toByte).deep))((12345678L, Array[Byte](0.toByte, 2.toByte).deep))
Run Code Online (Sandbox Code Playgroud)
这实际上只是转换Array为一个,IndexedSeq所以它可以进行equals比较(而不是默认的参考比较Array).assertResult如果顶级比较是a Array,这似乎就是这样,但如果Array它嵌套在另一个对象中则不行.这就是第一个例子有效的原因,但第二个例子没有.
鉴于此,这可能非常不方便,您可能会考虑使用不同的集合类型Array.
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |