2017-07-26 8 views
0

メソッドのテキストファイル出力を期待値と比較する単体テストを作成したいと思います。しかし、私は、比較において正確なライン順序付け要件を持つようにテストを制限したくない。 Java/Junitでこのようなテストを書くためのエレガントな方法はありますか?またはこのタスクのために自分のロジックを書く必要がありますか?JUnit:2つの順序付けられていないテキストファイルの内容を比較する

ありがとうございます!

のsetjmp

+0

これを詳しく説明できますか?それは漠然としている。たとえば、ファイルには事前定義された形式がありますか?そのコンテンツはどのように見えるのですか? – luizfzs

答えて

2

私はあなたが1行に1つの文字列と文字列の二つのリストにテスト対象のメソッドと期待値の戻り値を変換示唆しています。

2つのリストは、AssertJを使用して簡単に比較できます。それはリストにアサーションをテストすることになると私はそれの素晴らしいツールを見つける:

@Test 
public void shouldContainSameLines() throws IOException { 
    List<String> actualLines = ClassUnderTest.loadText(); 

    List<String> expectedLines = asList("Hello", "World", "Goodbye"); 
    assertThat(actualLines) 
     .containsAll(expectedLines); 
} 

assertThat()はAssertJの流暢APIへのエントリポイントです。 assertThat()に渡されたメソッドのタイプに基づいて、合理的な検証が提供されます。この場合、actualLinesにはexpectedLinesの順番ですべての行が含まれていることをテストするためにcontainsAll()を使用しました。

+0

また、JUnit assertThat()を対応するhamcrest matcher(これにも同様のものがあると確信しています)を使って指摘することができます。 – GhostCat

0

この目的でorg.hamcrest.Matchers.containsInAnyOrder(T... items)を使用できます。

@Test 
public void testSomeMethod_shouldReadFileProperly() { 
    String contents = "foo\nbar"; // change to actual method call 
    assertThat(Arrays.asList(contents.split("\n"), 
      containsInAnyOrder("bar", "foo")); 
} 
関連する問題