为排序的字符串列表创建测试用例

时间:2016-10-28 05:28:18

标签: java junit hamcrest

我有一个字符串列表,在我的代码中我订购了这个列表。我想写一个单元测试,以确保列表已正确订购。我的代码

@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;
      }
    };
  }
不知何故,它在某些时候取得了成功。

2 个答案:

答案 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);
     }