Java S.o.println函数的JUnit测试即使在将\n添加到预期输出后仍失败

Java S.o.println函数的JUnit测试即使在将\n添加到预期输出后仍失败,java,junit,Java,Junit,我正在测试一个使用System.out.println()打印的函数。我获取预期的输出+\n并将其与打印的内容进行比较,测试失败。但是,如果我从S.o.println()切换到S.o.print(),并且不将换行符添加到预期的输出中,则效果良好。该错误使它看起来可能正在添加两个换行符,但添加\n\n也不起作用 正在测试的功能: public void printTime() { String h0 = ""; String m0 = ""; String s0 = "";

我正在测试一个使用System.out.println()打印的函数。我获取预期的输出+\n并将其与打印的内容进行比较,测试失败。但是,如果我从S.o.println()切换到S.o.print(),并且不将换行符添加到预期的输出中,则效果良好。该错误使它看起来可能正在添加两个换行符,但添加\n\n也不起作用

正在测试的功能:

public void printTime() {
    String h0 = "";
    String m0 = "";
    String s0 = "";
    if(hour < 10)
        h0 = "0";
    if(min < 10)
        m0 = "0";
    if(sec < 10)
        s0 = "0";

    System.out.println(h0+hour+":"+m0+min+":"+s0+sec);
}
错误

org.junit.ComparisonFailure: expected:<12:00:00[]
> but was:<12:00:00[
]
>
org.junit.ComparisonFailure:应为:但为:

如果printTime执行println,则autoflush将写入缓冲文本。这似乎已经完成了

错误:Windows下的“\r\n”可能会被测试。 尝试
trim()
或添加
System.getProperty(“line.separator”)


如果您希望
“12:00:00\r\n”
,会发生什么情况?您可以使用“
SystemOutRule
测试该代码。它有一个方法
getLogWithNormalizedLineSeparator()
,允许您编写不依赖于操作系统的测试。
org.junit.ComparisonFailure: expected:<12:00:00[]
> but was:<12:00:00[
]
>
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos, true)); // Autoflush
clock.printTime();

assertEquals("12:00:00", baos.toString().trim());