我有两张HashMap<Integer, Question>
地图要比较。Question
在这种情况下是我写的一个Javabean。
我如何断言两者HashMap
相等?在这种情况下,相等意味着两者都HashMap
包含完全相同的Question
bean?
如果它完全相关,我正在使用 JUnit 编写单元测试。
我有两张HashMap<Integer, Question>
地图要比较。Question
在这种情况下是我写的一个Javabean。
我如何断言两者HashMap
相等?在这种情况下,相等意味着两者都HashMap
包含完全相同的Question
bean?
如果它完全相关,我正在使用 JUnit 编写单元测试。
使用番石榴,您可以:
assertTrue(Maps.difference(expected, actual).areEqual());
这是我最终使用的解决方案,它非常适合单元测试。
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 接口指定如果两个 Map 包含相等键的相等元素,则它们是相等的。
Here is how HashMap equal method works:
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;
}
Now since, it is invoking the equals method of Value objects, that means Value objects for a given key should be same (as governed by equals method).
Above will help you to understand in what case your JUnit will pass. In your JUnit method you can use:
public static void assertEquals(java.lang.Object expected,
java.lang.Object actual)
See link for more details.
Cheers !!
也比较地图,在您的特定情况下:
1)检查地图的大小是否相等
然后使用
`assertTrue(expectedMap.equals(hashMap));`
在您的 Question bean 中,您必须覆盖 equals 和 hashcode 方法。
我发现map 类的keySet方法很有用
assertEquals(map1.keySet(), map2.keySet());
如果您的 bean 类有一个字段,该字段对于您创建的每个对象都是唯一的,那么您应该使用该字段覆盖 bean 类中的 equals 和 hashcode 方法
您可以根据需要使用compare(-,-)
(主要用于sorting
目的)Comparator
接口来实现对象之间的自定义比较。或者使用equals()
方法来比较对象。