簡體   English   中英

JUnit:使用參數化類型 - 數組斷言集合的相等性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM