15

HashMap<Integer, Question>比較したい2 つのマップがあります。Questionこの場合は、私が作成した Javabean です。

HashMap両方が等しいとどのように断言できますか? このシナリオでは、等しいとは、両方HashMapにまったく同じQuestionBean が含まれていることを意味しますか?

関係がある場合は、JUnit を使用して単体テストを作成しています。

4

8 に答える 8

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>
于 2013-09-06T06:43:51.620 に答える
5

Question クラスが実装されている場合は、次のequalsことができます

assertEquals(expectedMap, hashMap);

assertTrue(expectedMap.equals(hashMap));

Map インターフェイスは、2 つの Map が等しいキーの等しい要素を含む場合に等しいことを指定します。

于 2013-09-05T04:03:26.937 に答える
3

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)

詳細については、リンクを参照してください。

乾杯 !!

于 2013-09-05T04:45:09.537 に答える
3

特定のケースでは、マップを比較しすぎます:

1)マップのサイズが等しいかどうかを確認します

次に使用します

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

Question Bean では、equals および hashcode メソッドをオーバーライドする必要があります。

于 2013-09-05T04:33:54.573 に答える
0

compare(-,-)インターフェイスの(主にsorting目的で使用される) を使用Comparatorして、要件としてオブジェクト間のカスタム比較を実装できます。またはequals()メソッドを使用してオブジェクトを比較します。

于 2013-09-05T04:48:29.383 に答える