2014-11-24 36 views
0

我正在運行一個ScalaTest聲明正確的數據類型是由我的actor返回的。由於物理地址導致的ScalaTest斷言不匹配

名爲 「testActor」 的演員來自SortedMap的轉換數據[長,爲SortedMap [字符串,雙]到的SortedMap [字符串,數組[雙]

當前的代碼是:

val data: SortedMap[Long, SortedMap[String, Double]] = SortedMap (1000L -> SortedMap("c1" -> 1., "c2" -> 2.1), 2000L -> SortedMap("c1" -> 1.1), 3000L -> SortedMap("c1" -> 0.95)) 
val expectedResult = SortedMap("t1" -> Array(1., 1.1, 0.95), "t2" -> Array(2.1)) 
actor ! testActor(data) 
expectMsg(replyTestActor(expectedResult) 

出於某種原因,斷言是在地圖上的物理地址進行,即

assertion failed: expected replyTestActor(Map(c1 -> [[email protected], c2 -> [[email protected]),2,2000), found replyTestActor(Map(c1 -> [[email protected], c2 -> [[email protected]),2,2000) 

我要評論說,在調試模式下,當我輸入「表達式求值」上一個破發點中的演員消息nd「expectedValue」是相同的ץ

回答

1

問題是SortedMap中的值。

> Array(42) == Array(42) 
res0: Boolean = false 

數組不提供友好的平等實現。

編輯:plus,Array是一個可變結構,通常不推薦在actor之間傳遞消息時使用它們。

+0

謝謝。有沒有辦法添加一個平等的實現? – user3370773 2014-11-24 14:42:33

+0

你可以嘗試使用'expectMsgPF [T](d:Duration)(pf:PartialFunction [Any,T]):T'並定義一個部分函數來深入探索消息。然後你可以使用'Array.deep'來真正測試你的數組的內容。 – vptheron 2014-11-24 14:50:03

+0

請您詳細介紹一下如何編寫局部函數以便在地圖中查看並比較使用數組的深度數組? – user3370773 2014-11-25 06:45:58