通过排序测试集合相等性

时间:2012-04-06 12:41:49

标签: unit-testing testing junit junit4 hamcrest

我正在编写一个简单的测试,它检查方法返回Collection下面的一些接口。我正在尝试尽可能地抽象此集合的内部表示,以便在两种情况下都会传递此测试:当方法返回ListSet时。

Set应该是有序的(LinkedHashSetLinkedHashMap支持Set),所以我也要测试订单。所以我一般都想写这样的测试:

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

如果两个集合都不是“相同”(即相同排序中的相同值),则会失败。

我发现Hamcrest库在这种情况下很有用,但是我被困在它的文档中。任何帮助将不胜感激,但是如果可能的话,我会尽量避免编写CollectionTestUtil或我自己的Hamcrest Matcher

2 个答案:

答案 0 :(得分:1)

JUnit的org.junit.Assert包含多个assertArrayEquals - 针对不同类型的实现,因此您可以执行以下操作:

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

答案 1 :(得分:1)

你快到了。

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

会做到的。与containsInAnyOrder比较。