2016-10-28 10 views
0

私は文字列のリストを持ち、私のコードでこのリストを注文します。私は、リストが適切に発注されたことを確認するための単体テストを書いています。私のコード文字列のソートされたリストのテストケースを作成する

@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

どこに発注コードはありますか?そしてあなたはそれをテストのどこで呼びましたか?あなたのテストは単にリストを作成し、それをアサートするだけです。指定したマッチャーのロジックに従って確実に合格します – Vasan

+0

'if(item.get(i).compareTo(item.get(i + 1))< 0)はfalseを返します; 'は注文をチェックします。 – 4castle

答えて

2

ここではのものが複雑になります。カスタムマッチャーの作成は素晴らしい演習ですが、テストに実際の価値を追加するものではありません。

代わりに私は、あなたは、単にいくつかの

String[] expectedArray =.... 

値を作成し、assertThatへのお電話にそれを与えることを示唆しています。それほどセクシーではありませんが、読みやすく理解しやすいです。そしてそれはユニットテストのためにと数えています!

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); 
    } 
関連する問題