メソッドのテキストファイル出力を期待値と比較する単体テストを作成したいと思います。しかし、私は、比較において正確なライン順序付け要件を持つようにテストを制限したくない。 Java/Junitでこのようなテストを書くためのエレガントな方法はありますか?またはこのタスクのために自分のロジックを書く必要がありますか?JUnit:2つの順序付けられていないテキストファイルの内容を比較する
ありがとうございます!
のsetjmp
メソッドのテキストファイル出力を期待値と比較する単体テストを作成したいと思います。しかし、私は、比較において正確なライン順序付け要件を持つようにテストを制限したくない。 Java/Junitでこのようなテストを書くためのエレガントな方法はありますか?またはこのタスクのために自分のロジックを書く必要がありますか?JUnit:2つの順序付けられていないテキストファイルの内容を比較する
ありがとうございます!
のsetjmp
私はあなたが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()
を使用しました。
また、JUnit assertThat()を対応するhamcrest matcher(これにも同様のものがあると確信しています)を使って指摘することができます。 – GhostCat
この目的で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"));
}
これを詳しく説明できますか?それは漠然としている。たとえば、ファイルには事前定義された形式がありますか?そのコンテンツはどのように見えるのですか? – luizfzs