2012-04-06 66 views
0

我正在寫一個簡單的測試,它檢查返回Collection下面的一些接口的方法。我試圖儘可能多地提取此集合的內部表示,以便在兩種情況下都能通過此測試:方法返回ListSet測試集合與訂購相等

Set應該訂購(LinkedHashSetLinkedHashMap支持Set),所以我也必須測試訂單。所以一般我想編寫測試是這樣的:

assertThat(returnedList, containsOrdered('t1", "t2", "t3")); 

當且僅當兩個集合不是「同一」(即同在相同的排序值),這將失敗。

我發現Hamcrest圖書館在這種情況下是有用的,但我被困在它的文檔。任何幫助將不勝感激,但我會盡量避免寫作CollectionTestUtil或我自己的Hamcrest Matcher如果可能的話。

回答

1

你就要成功了。

assertThat(returnedList, contains("t1", "t2", "t3")) 

會做到這一點。與containsInAnyOrder進行比較。

+0

你能提供完整的包和類路徑到這個包含方法嗎?你是否使用JUnit或Hamcrest的assertThat?它有什麼區別嗎? – 2012-04-07 19:29:47

+0

我有錯誤版本的hamcrest圖書館,因爲我拉着hamcrest-所有的依賴。我固定它,與junit重疊的麻煩一起(有沒有提供hamcrest的junit-dep神器,所以有可能添加完整的hamcrest支持)。謝謝你的幫助 – 2012-04-10 08:58:08

1

的JUnit有一個包含多個assertArrayEquals -implementations針對不同類型的org.junit.Assert,所以你可以這樣做:

Collection<String> returnedList = new ArrayList<String>(); //Replace with call to whatever returns the ordered collection  
    Assert.assertArrayEquals(new Object[]{"t1", "t2", "t3"}, returnedList.toArray()); 
+0

是的,這是我正在考慮的替代方案(比較數組而不是集合),如果另一個失敗,我會這樣做。 – 2012-04-07 19:29:26