HashMap<Integer, Question>
比較したい2 つのマップがあります。Question
この場合は、私が作成した Javabean です。
HashMap
両方が等しいとどのように断言できますか? このシナリオでは、等しいとは、両方HashMap
にまったく同じQuestion
Bean が含まれていることを意味しますか?
関係がある場合は、JUnit を使用して単体テストを作成しています。
HashMap<Integer, Question>
比較したい2 つのマップがあります。Question
この場合は、私が作成した Javabean です。
HashMap
両方が等しいとどのように断言できますか? このシナリオでは、等しいとは、両方HashMap
にまったく同じQuestion
Bean が含まれていることを意味しますか?
関係がある場合は、JUnit を使用して単体テストを作成しています。
これは、ユニットテストの目的で完全に機能する、最終的に使用することになったソリューションです。
for(Map.Entry<Integer, Question> entry : questionMap.entrySet()) {
assertReflectionEquals(entry.getValue(), expectedQuestionMap.get(entry.getKey()), ReflectionComparatorMode.LENIENT_ORDER);
}
これには、パッケージassertReflectionEquals()
からの呼び出しが含まれます。unitils
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils-core</artifactId>
<version>3.3</version>
<scope>test</scope>
</dependency>
Question クラスが実装されている場合は、次のequals
ことができます
assertEquals(expectedMap, hashMap);
assertTrue(expectedMap.equals(hashMap));
Map インターフェイスは、2 つの Map が等しいキーの等しい要素を含む場合に等しいことを指定します。
HashMap equal メソッドの仕組みは次のとおりです。
public boolean equals(Object o) {
..........
..........
Map<K,V> m = (Map<K,V>) o;
..........
Iterator<Entry<K,V>> i = entrySet().iterator();
while (i.hasNext()) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
if (value == null) {
if (!(m.get(key)==null && m.containsKey(key)))
return false;
} else {
if (!value.equals(m.get(key)))
return false;
}
...........
...........
return true;
}
これは、Value オブジェクトの equals メソッドを呼び出しているためです。つまり、指定されたキーの Value オブジェクトは同じでなければなりません (equals メソッドによって制御されます)。
上記は、JUnit がどのような場合に合格するかを理解するのに役立ちます。JUnit メソッドでは、以下を使用できます。
public static void assertEquals(java.lang.Object expected,
java.lang.Object actual)
詳細については、リンクを参照してください。
乾杯 !!
特定のケースでは、マップを比較しすぎます:
1)マップのサイズが等しいかどうかを確認します
次に使用します
`assertTrue(expectedMap.equals(hashMap));`
Question Bean では、equals および hashcode メソッドをオーバーライドする必要があります。
compare(-,-)
インターフェイスの(主にsorting
目的で使用される) を使用Comparator
して、要件としてオブジェクト間のカスタム比較を実装できます。またはequals()
メソッドを使用してオブジェクトを比較します。