我有一个字符串列表,在我的代码中我订购了这个列表。我想写一个单元测试,以确保列表已正确订购。我的代码
@Test
public void test() {
List<String> orderedList = new ArrayList<String>();
orderedList.add("a");
orderedList.add("b");
orderedList.add("a");
assertThat(orderedList, isInDescendingOrdering());
}
private Matcher<? super List<String>> isInDescendingOrdering()
{
return new TypeSafeMatcher<List<String>>()
{
@Override
public void describeTo (Description description)
{
description.appendText("ignored");
}
@Override
protected boolean matchesSafely (List<String> item)
{
for(int i = 0 ; i < item.size() -1; i++) {
if(item.get(i).equals(item.get(i+1))) return false;
}
return true;
}
};
}
不知何故,它在某些时候取得了成功。
答案 0 :(得分:2)
你绝对过度复杂。编写自定义匹配器是一个很好的练习,但它不会为您的测试增加任何实际价值。
相反,我建议您只创建一些
String[] expectedArray =....
值并将其交给你对assertThat的调用。这不太性感,但更容易阅读和理解。这就是单元测试的计数!
答案 1 :(得分:1)
您只需复制数组,然后对其进行排序,最后将其与原始数组进行比较即可。
代码如下:
@Test
public void test() {
List<String> orderedList = new ArrayList<String>();
orderedList.add("a");
orderedList.add("b");
orderedList.add("a");
//Copy the array to sort and then to compare with original
List<String> orderedList2 = new ArrayList<String>(orderedList);
orderedList2.sort((String s1, String s2) -> s1.compareTo(s2));
Assert.assertEquals(orderedList, orderedList2);
}