我有關於在Matchers中使用FunSuite的問題。Scala FunSuite在比較列表時出現「應該是」和「===」之間的區別
我試圖讓我試着這樣做要比較的對象列表:
orders2 should be(tiOrdersList2)
其中ORDERS2和tiOrdersList2是scala.List [MyObject來]
本場比賽悲慘的失敗了,所以我嘗試與
orders2.toSeq should be (tiOrdersList2.toSeq)
沒有運氣
然後我試圖匹配SINGL Ë項目
orders2(0) should be (tiOrdersList2(0))
末沒有運氣再次
我發現,要使它成爲一個對象,我不得不使用「===」,並要回我設法拿到了第一種情況下工作這工作:
orders2 === tiOrdersList2
我不明白這裏有什麼區別。 我認爲「應該是」匹配比「===」嚴格,但我看不出爲什麼。 任何人都可以解釋給我?
注意:我想指出MyObject具有不同的基於Java的類型的各種屬性,包括float。可能是這個原因嗎?
UPDATE 我查了一下簡單的類匹配(見下文片斷),如果我覆蓋了equals方法對我自己,也「應爲」的作品,所以主要問題是一種比較的是什麼「 ===「幹嘛?
import org.scalatest.{Matchers, FunSuite}
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class blahSuite extends FunSuite with Matchers
{
test("extractSessions") {
new Object1 === (new Object1)
new Object2 === (new Object2)
new Object1 shouldEqual (new Object1)
new Object2 should be (new Object2)
}
class Object1 {
val pippo: java.lang.String = "blah"
val pappo:java.lang.Long = 0l
override def toString(): String = {
s"$pippo, $pappo"
}
}
class Object2 {
val pippo: java.lang.String = "blah"
val pappo:java.lang.Long = 0l
val pluto:java.lang.Float = 0.0f
override def toString(): String = {
s"$pippo, $pappo, $pluto"
}
}
}
UPDATE2 似乎「===」比較非常鬆散:我試着用其他情況,即對象的內容是不同的(即不同的「皮波」的字符串),它告訴我,他們是一樣。 所以它似乎比較類的類型,而不是做一些反思的魔術... 我越來越多的困惑,並開始認爲我應該實現我的等同方法,忘掉這個...
也許他們排序不同,等於檢查是錯誤的,因爲它? –
nope,我也試過在單個對象上做它。即使通過打印內容(我實現了一些toString方法)來檢查這些集合,並使用調試器查看每個對象。 – gmconte
您可以添加失敗的特定測試嗎?在第一次更新中提到的那些沒有描述你在原始問題中討論的列表/序列。或者,您是否將您的問題縮小到只針對Object1和Object2? –