1
我想在包含數組的case類的ScalaTest中聲明相等。 (所以內置的平等匹配器的情況下,類是不適用的。) 例子:如何爲嵌套的scala單元相等匹配器獲取有意義的錯誤消息?
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。兩者都存在的問題是,在運行測試時,我得到錯誤消息,即「示例」對象不相同(如果它們不是),但我希望看到它們在哪個元素中有所不同。
我該如何做到這一點?
謝謝你的幫助!
[更新]在實踐中,示例包含多個數組和其他字段,我相應地更改了代碼。
謝謝您的回覆,我考慮過這個問題,但因爲我在課堂中有多個字段(例如10),我不想爲每個支票編寫10個應收帳單。 – DreamFlasher 2015-04-01 14:36:38
@DreamFlasher也許我不清楚 - 不確定。我的意思是建議替換left.array.length應該是(other.array.length) (i < - 0直到left.array.length)left.array(i)應該是(other.array(i )) }''用'left.array應該包含theSameElementsInOrderAs other.array' – 2015-04-01 14:52:34
啊謝謝,現在有道理,是的,你是對的,我不應該比較自己的元素,而是使用數組比較。但我仍然沒有出現錯誤? – DreamFlasher 2015-04-01 14:54:47