Java System.out.println/System.err.println的JUnit测试

Java System.out.println/System.err.println的JUnit测试,java,junit,system.out,Java,Junit,System.out,我必须为一个应用程序编写测试,我正试图为控制台上打印的东西编写一个JUnit测试。 应用程序已--> 这就是我到目前为止所做的: ByteArrayOutputStream errContent = new ByteArrayOutputStream(); System.setErr(new PrintStream(errContent)); //left username empty and pressed login assertEquals("Username cannot be empt

我必须为一个应用程序编写测试,我正试图为控制台上打印的东西编写一个JUnit测试。 应用程序已-->

这就是我到目前为止所做的:

ByteArrayOutputStream errContent = new ByteArrayOutputStream();
System.setErr(new PrintStream(errContent));
//left username empty and pressed login
assertEquals("Username cannot be empty", errContent.toString());
但是我得到了比较失败

expected <Username cannot be empty[]> 
but was <Username cannot be empty[
]>

//difference of next line. 

测试中缺少的是,
System.err.println()
的末尾有一个换行符。更改
assertEquals(“用户名不能为空”,errContent.toString())
to
assertEquals(“用户名不能为空”+System.getProperty(“line.separator”)、errContent.toString()

真正的问题是为什么要测试java标准库方法。在我看来,测试不应该因为有人决定更改错误消息而失败。测试中缺少的是,
System.err.println()
的末尾有一个换行符。更改
assertEquals(“用户名不能为空”,errContent.toString())
to
assertEquals(“用户名不能为空,\n”,errContent.toString())
@Quilliom我们不在工作,但这是针对我正在学习的一个类,该应用程序是通过控制台输出提供给我们进行测试的。@sakshik12您可以看看它有助于您测试此类输出。免责声明:我是该库的作者。@wero感谢您的改进。改变了我的生活answer@Jens
System.getProperty(“line.separator”)
也可以工作。谢谢。:)@sakshik12这是更好的方法,有了它,您就可以独立操作系统了
expected <Username cannot be empty[]> 
but was <Username cannot be empty[
]>

//difference of next line. 
expected <Username cannot be empty[]
> 
but was <Username cannot be empty[
]
>