3 回答
TA贡献1780条经验 获得超5个赞
您应该保持系统的默认行为,并更改您的断言代码:
String EOL = System.getProperty("line.separator")
assertEquals("Some line of text" + EOL, output);
为什么?EOL (end-of-line, or line-separator) 依赖于系统,如果你改变默认行为,你可能会遇到其他奇怪的错误。
在您的情况下,您可以在自己的字符串中更改 EOL 就足够了。
其他(可能不好)方法可能包括:替换所有\r\n和\r到\n并使用\n来比较所有输出,不使用PrintStream而是自己构建字符串等。
TA贡献1863条经验 获得超2个赞
对于 JUnit 4,系统规则库有助于此类测试。它也支持行尾规范化。测试看起来像
public class MyTest {
@Rule
public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@Test
public void writesTextToSystemOut() {
System.out.print(String.format("Some line of text%n)");
assertEquals(
"Some line of text\n",
systemOutRule.getLogWithNormalizedLineSeparator()
);
}
}
完全披露:我是系统规则的作者。
添加回答
举报