2013-09-05 2 views
5

У меня есть две карты HashMap<Integer, Question>, которые я бы хотел сравнить. Question В этом случае явавеан, которого я написал.Как утверждать, что два значения HashMap с Javabean равны?

Как утверждать, что и HashMap равны? В этом случае одинаковое означает, что и HashMap содержит точно такие же Question bean?

Если это действительно так, я пишу модульный тест с использованием JUnit.

+1

Если вы используете Java 1.7 или более поздней версии, ниже фрагмент кода будет работать. '' 'Объекты.равно (ожидаетсяWordMap, 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); 
} 

Это предполагает применение assertReflectionEquals() из unitils пакета.

<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

если ваш класс боб имеет поле, которое будет уникальным для каждого объекта вы создаете, то вы должны переопределить равных и метод Hashcode в ур классе компонента с этим полем

2

Слишком сравнить карты, в вашем конкретном случае:

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 объектов Value, это означает, что объекты значений для данного ключа должны быть такими же (как определяются приравнивает метод) ,

Выше поможет вам понять, в каком случае ваш JUnit пройдет. В вашем методе JUnit вы можете использовать:

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

См link для более подробной информации.

Cheers !!

0

Вы можете использовать compare(-,-) (В основном используется для цели sorting) интерфейса Comparator для реализации пользовательского сравнения объектов в соответствии с вашими требованиями. Или используйте метод equals() для сравнения объектов.

5

Использование Guava вы можете сделать:

assertTrue(Maps.difference(expected, actual).areEqual()); 
Смежные вопросы