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

Ayr*_*yrx 7 java comparison hashmap

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

我怎么断言两者HashMap是平等的?在这种情况下,相等意味着两者都HashMap包含完全相同的Questionbean?

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

Thi*_*ilo 12

如果你的 Question 类实现了,equals那么你可以这样做

assertEquals(expectedMap, hashMap);

assertTrue(expectedMap.equals(hashMap));
Run Code Online (Sandbox Code Playgroud)

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


Ari*_*l T 11

使用Guava你可以做到:

assertTrue(Maps.difference(expected, actual).areEqual());
Run Code Online (Sandbox Code Playgroud)


Ayr*_*yrx 6

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

for(Map.Entry<Integer, Question> entry : questionMap.entrySet()) {
    assertReflectionEquals(entry.getValue(), expectedQuestionMap.get(entry.getKey()), ReflectionComparatorMode.LENIENT_ORDER);
}
Run Code Online (Sandbox Code Playgroud)

这涉及assertReflectionEquals()unitils包调用.

<dependency>
    <groupId>org.unitils</groupId>
    <artifactId>unitils-core</artifactId>
    <version>3.3</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)