JUnit断言两个字符串是否相等

5

我查看了这个问题,并尝试了一下,但是没有成功。

我的代码应该通过使用Streams从控制台读取输出的文本,来测试方法是否正确输出。

    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    PrintStream myStream = new PrintStream(outStream);
    System.setOut(myStream);
    o.doSomething(); //printing out Hi
    System.out.flush();
    System.setOut(savedOldStream);//setting it back to System.out
    assertEquals(outStream.toString(),"Hi");

但每次运行JUnit都会失败。 我还尝试了:assertTrue(outStream.toString().equals("Hi")); 但这也没有起作用。 这是doSomething()方法:
public void doSomething () {
    System.out.println("Hi");
}

3
didn't work”是什么意思?实际发生了什么?你是否收到任何错误信息或者只是一个失败的断言? - PM 77-1
不需要重新分配 System.out 来测试。您可以将 ByteArrayOutputStream 传递给 doSomething() 方法。 - M A
1个回答

9
PrintStream#println(String str)在字符串末尾添加一个换行符,因此您的断言应该去掉额外的一行。
assertEquals(outStream.toString().trim(),"Hi");

System.out中写入内容不会将任何内容写入到ByteArrayOutputStream中。 - Jesper
非常感谢!因此,使用System.out.print也可以解决问题吗? - NhatNienne
@ Jesper,原帖作者已重新分配了System.out - M A
@NhatNienne 是的,使用 print 可以避免换行。 - M A
同意。对于这种情况,OP可以按照您的建议将输出流作为参数传递。 - M A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接