2013-09-05 2 views
5

私は比較したい2つのHashMap<Integer, Question>マップを持っています。この場合のQuestionは私が書いたJavabeanです。2つのHashMap with Javabeanの値が等しいことをどのようにアサーションしますか?

HashMapが等しいと主張するにはどうすればよいですか?このシナリオでは、equalは、両方ともHashMapに全く同じQuestion beanが含まれていることを意味しますか?

JUnitを使用してユニットテストを作成しています。

+1

コードスニペットが動作するの下には、Java 1.7以降のバージョンを使用している場合。 '' 'オブジェクト。equals(expectedWordMap、actualWordMap) '' ' です。 。 equalsメソッドについて詳しくは、 https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Objectを参照してください。 - –

答えて

6

ここで私は最終的に単体テストの目的で完璧に動作したソリューションを使用しています。

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

これはunitilsパッケージからassertReflectionEquals()を呼び出す必要とします。あなたが行うことができますグアバを使用

<dependency> 
    <groupId>org.unitils</groupId> 
    <artifactId>unitils-core</artifactId> 
    <version>3.3</version> 
    <scope>test</scope> 
</dependency> 
0

ご質問クラスがequalsを実装している場合、あなただけの

assertEquals(expectedMap, hashMap); 

assertTrue(expectedMap.equals(hashMap)); 

を行うことができますMapインタフェースは、彼らが同じキーのための同等の要素が含まれている場合、二つのマップが等しいことを指定します。

0

Beanクラスは、あなたがあなたの特定のケースでは、あまりにもマップを比較し、そのフィールド

2

でウルBeanクラスのequalsとhashCodeメソッドをオーバーライドする必要があり、その後、すべてのためにユニークになるフィールドを作成するオブジェクトをしている場合:

1)その等しい

は、その後、あなたがオーバーライドする必要があり、あなたの質問豆で

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

を使用する場合は、マップのサイズを確認してくださいequalsメソッドとhashcodeメソッドここ

1

は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; 
} 

今、与えられたキーの値オブジェクトを意味する値オブジェクトのequalsメソッドを呼び出している、ので(equalsメソッドによって支配されるように)と同じでなければなりません。

上記はJUnitがどのような場合に合格するかを理解するのに役立ちます。あなたが使用することができ、あなたのJUnitの方法では:

public static void assertEquals(java.lang.Object expected, 
           java.lang.Object actual) 

詳細はlinkを参照してください。

乾杯!

0

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

5

assertTrue(Maps.difference(expected, actual).areEqual()); 
関連する問題