如何断言两个带有Javabean值的HashMap是否相等?

时间:2013-09-05 03:56:26

标签: java hashmap comparison

我想要比较两张HashMap<Integer, Question>地图。在这种情况下,Question是我写过的Javabean。

我如何断言两个HashMap是平等的?在这种情况下,相等意味着HashMap都包含完全相同的Question bean?

如果完全相关,我正在使用JUnit编写单元测试。

8 个答案:

答案 0 :(得分:9)

使用番石榴你可以做到:

assertTrue(Maps.difference(expected, actual).areEqual());

答案 1 :(得分:6)

这是我最终使用的解决方案,它完美地用于单元测试目的。

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>

答案 2 :(得分:3)

在特定情况下比较地图:

1)检查地图的大小是否等于

然后使用

    `assertTrue(expectedMap.equals(hashMap));` 

在你的问题bean中,你必须覆盖equals和hashcode方法。

答案 3 :(得分:2)

以下是HashMap等值方法的工作原理:

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)

有关详细信息,请参阅link

干杯!!

答案 4 :(得分:1)

如果您的问题类实现equals,那么您可以执行

assertEquals(expectedMap, hashMap);

assertTrue(expectedMap.equals(hashMap));

Map接口指定两个Maps相等,如果它们包含相等键的相等元素。

答案 5 :(得分:1)

我发现地图类的 keySet 方法很有用

        assertEquals(map1.keySet(), map2.keySet());

答案 6 :(得分:0)

如果您的bean类有一个对您创建的每个对象都是唯一的字段,那么您应该使用该字段覆盖ur bean类中的equals和hashcode方法

答案 7 :(得分:0)

您可以使用compare(-,-)接口的sorting(主要用于Comparator目的)来实现对象之间的自定义比较。或者使用equals()方法来比较对象。