LinkedListをassertEquals(expected, testList)とする場合

junitで良く使うクセに、よく忘れるのでメモ。


import java.util.*;
(中略)
LinkedList list = new LinkedList();
list.clear();
for(Iterator i= list.iterator(); i.hasNext(); ){
うにゃうにゃ。条件を作る。
}
というのばかり、で、

public Map factoryMap(何かの条件){
Map mp = new HashMap();
mp.put("column1", obj1);
mp.put("column2", obj2);
(たくさんある)
mp.put("columnN", objN);
return mp; // 何かの条件にあったMapを返す
}
こういう処理もあって、最終的にこういう処理を書く場合

public LinkedList getMapedList(LinkedList 条件リスト){
LinkedList list = new LinkedList();
for(Iterator i = 条件リスト.iterator(); i.hasNext(); ){
list.add(factoryMap((条件)i.next()));
}
return list;
}
みたいな、特定の条件にあうようなオブジェクトのMapのListを。テストする場合(長い前フリだな)
こうやって切り抜けた。

public void testGetMapedList(){
LinkedList expectedList = new LinkedList();
HashMap m1 = new HashMap();
m1.put("column1", "obj1の文字列表現"); // ←☆
expectedList(m1);
(泥臭い処理で、こうなるはずだ、というリストをぐりぐりと作る)
LinkedList testList = getMapedList();
assertEquals(expectedList, testList); // うまくいかない。
assertEquals(expectedList.toString(), testList.toString()); // なんとかなる
「obj1」と「obj1の文字列表現」を比較するとNGなのは当然、で、両者のtoString()で比較する。
こんなequalsで良しとみなして良い場面というのは当然ソースの書き手が考えなければならない。
が、文字列に落としてequalsで、というのはよく使う。