我正在编写一个简单的测试,它检查方法返回Collection
下面的一些接口。我正在尝试尽可能地抽象此集合的内部表示,以便在两种情况下都会传递此测试:当方法返回List
和Set
时。
Set
应该是有序的(LinkedHashSet
或LinkedHashMap
支持Set
),所以我也要测试订单。所以我一般都想写这样的测试:
assertThat(returnedList, containsOrdered('t1", "t2", "t3"));
如果两个集合都不是“相同”(即相同排序中的相同值),则会失败。
我发现Hamcrest库在这种情况下很有用,但是我被困在它的文档中。任何帮助将不胜感激,但是如果可能的话,我会尽量避免编写CollectionTestUtil或我自己的Hamcrest Matcher
。
答案 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
比较。