2013-09-05 20 views
5

Tôi có hai bản đồ HashMap<Integer, Question> mà tôi muốn so sánh. Question trong trường hợp này là một Javabean tôi đã viết.Làm cách nào để khẳng định rằng hai giá trị HashMap với Javabean là như nhau?

Làm cách nào để khẳng định rằng cả hai HashMap đều bằng nhau? Trong trường hợp này, bằng nhau có nghĩa là cả hai HashMap chứa chính xác cùng một hạt Question?

Nếu nó có liên quan, tôi viết một bài kiểm tra đơn vị sử dụng JUnit.

+1

Nếu bạn đang sử dụng Java 1.7 hoặc phiên bản cao hơn, bên dưới đoạn mã sẽ làm việc. '' 'Đối tượng.bằng (expectedWordMap, actualWordMap) '' ' . . Vui lòng tìm thêm thông tin tại đây về phương thức equals: https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Object - - –

Trả lời

6

Đây là giải pháp cuối cùng tôi đã kết thúc bằng cách sử dụng làm việc hoàn hảo cho mục đích thử nghiệm đơn vị.

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

Điều này liên quan đến việc gọi assertReflectionEquals() từ gói unitils.

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

Nếu lớp Câu hỏi của bạn thực hiện equals sau đó bạn chỉ có thể làm

assertEquals(expectedMap, hashMap); 

assertTrue(expectedMap.equals(hashMap)); 

Giao diện Bản đồ xác định rằng hai Maps bằng nhau nếu chúng chứa các yếu tố bình đẳng cho các phím bằng nhau.

0

nếu lớp bean của bạn có một lĩnh vực mà sẽ là duy nhất cho mỗi đối tượng bạn tạo thì bạn nên ghi đè lên bằng và phương pháp hashcode trong lớp bean ur với lĩnh vực mà

2

Quá so sánh bản đồ, trong trường hợp cụ thể của bạn:

1) Kiểm tra kích thước của bản đồ nếu bình đẳng của nó

Sau đó sử dụng

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

trong đậu Câu hỏi của bạn, bạn phải ghi đè phương thức equals và hashcode.

1

Đây là phương pháp bình đẳng HashMap làm việc như thế nào:

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

Bây giờ kể từ đó, nó được gọi equals phương pháp của các đối tượng giá trị gia tăng, có nghĩa là đối tượng giá trị gia tăng cho một chìa khóa cho nên cùng (như điều chỉnh bằng phương pháp tương đương) .

Ở trên sẽ giúp bạn hiểu trường hợp nào JUnit của bạn sẽ vượt qua. Trong phương pháp JUnit, bạn có thể sử dụng:

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

Xem link để biết thêm chi tiết.

Chúc mừng !!

0

Bạn có thể sử dụng compare(-,-) (Chủ yếu được sử dụng cho mục đích sorting) của giao diện Comparator để thực hiện so sánh tùy chỉnh giữa các đối tượng theo yêu cầu của bạn. Hoặc sử dụng phương thức equals() để so sánh các đối tượng.

5

Sử dụng ổi bạn có thể làm:

assertTrue(Maps.difference(expected, actual).areEqual()); 
Các vấn đề liên quan