JUnit:比较两个无序文本文件的内容

时间:2017-07-26 17:48:23

标签: java junit comparison file-comparison

我想编写一个单元测试来比较方法的文本文件输出和期望值。但是,我不希望在比较中限制测试以获得精确的行排序要求。有没有一种优雅的方式在Java / Junit中编写这样的测试,还是我必须为此任务编写自己的逻辑?

谢谢!

的setjmp

2 个答案:

答案 0 :(得分: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()的方法的类型,提供了合理的验证。在这种情况下,我使用containsAll()来测试actualLines是否包含expectedLines中任何顺序的所有行。

答案 1 :(得分: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"));
}