0

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

Set应该订购(或LinkedHashSet支持LinkedHashMapSet所以我也必须测试订单。所以一般我想写这样的测试:

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

如果两个集合不是“相同的”(即相同顺序中的相同值),这将失败。

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

4

2 回答 2

1

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

    Collection<String> returnedList = new ArrayList<String>(); //Replace with call to whatever returns the ordered collection       
    Assert.assertArrayEquals(new Object[]{"t1", "t2", "t3"}, returnedList.toArray());
于 2012-04-06T13:18:15.267 回答
1

你快到了。

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

会做的。与 比较containsInAnyOrder

于 2012-04-06T21:14:55.313 回答