[英]JUnit: Asserting for equality of collections with parameterized type - arrays
我試圖斷言以下集合的平等:
String[] arr1= new String[] { "1", "2", "3" };
Collection<String[]> coll1= Arrays.asList(arr1, arr1);
String[] arr2 = new String[] { "1", "2", "3" };
Collection<String[]> coll2 = Arrays.asList(arr2, arr2);
assertEquals(coll1, coll2);
但是,我得到了與預期相反的結果 - 斷言錯誤。 問題是使用Object.equals()
方法檢查數組是否相等,它實際上檢查了明顯不同的數組的引用。
有沒有方便的方法我可以使用JUnit或Guava來解決這個問題?
編輯:請注意,我想比較Collection對象, 而不是數組本身。
這就是Hamcrest來到rescque的地方。 這是javadoc 鏈接 。 我建議使用IsArrayContainingInOrder
所以...
assertThat(coll1, IsArrayContainingInOrder.arrayContaining(coll2));
抱歉,以上內容適用於陣列,但下面的內容適用於集合......
assertThat(coll1, IsIterableContainingInOrder.contains(coll2.toArray()));
這使用IsIterableContainingInOrder
僅供參考,我發現使用Hamcrest匹配器如此優雅,以至於我很少使用非Hamcrest測試。 所以我的所有測試都是這樣的
assertThat(myValue, is(true));
assertThat(myValue, equalTo("something"));
assertThat(myList, IsIterableContainingInAnyOrder.containsInAnyOrder(first, second, third));
關於肥皂盒。
你可以使用Arrays#deepEquals
:
boolean isSameArrayContent = Arrays.deepEquals(coll1.toArray(), coll2.toArray());
assertTrue(isSameContent);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.