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