java - Println测试用例: println and expected output are the same,但测试失败

标签 java junit println

这是我现在正在做的一个简单测试用例的代码:

private static final ByteArrayOutputStream OUTCONTENT = new ByteArrayOutputStream();
private static final PrintStream OLD_STD_OUT = System.out;

@Before
public  void setUp() {       
    System.setOut(new PrintStream(OUTCONTENT));
}

@After
public  void tearDown(){
     System.setOut(OLD_STD_OUT);
}

@Test
 public void consolePrintResetTest(){
     consolePrintReset();
     assertEquals("Les statistiques ont été réinitialisées avec succès! \n", OUTCONTENT.toString());
}

以及我正在测试的方法:

 public static void consolePrintReset(){
       System.out.println("Les statistiques ont été réinitialisées avec succès!");
 }

这里是所发生情况的屏幕截图: http://puu.sh/vpY3b/9a398d0b41.png

我很确定我忽略了一些非常愚蠢的东西,但我没有发现我缺少什么明显的东西来使这个测试用例工作。任何帮助将不胜感激。

感谢您花时间阅读我的问题!

最佳答案

重点是你的断言期望在行的末尾有“\n”。但换行符确实取决于您的操作系统。

因此:只需对捕获的输出字符串调用 trim() 并从预期结果中删除换行符即可。

编辑OP的评论:

  • 在现实世界的应用程序中,通常不会写入 System.out;如果有的话,您正在使用一些日志框架。
  • 检查输出是否完全符合您的预期也没有多大意义。这意味着每次您更改消息时,测试都会中断。没有帮助。
  • 如果有的话,人们宁愿确保某个记录器对象例如看到了特定的日志调用,“包含”一些重要的关键字等。
  • 就您的情况而言,尚不清楚您打算实现什么目标!你看,当你调用一些“被测试的方法”时;那里的代码被执行;当有 System.out.println() 调用时;当发生该调用时,该调用将被计入您的承保范围内。添加一个测试用例来检查写入是否确实发生对于您的覆盖率根本没有帮助。请记住:您测量生产代码的覆盖范围。测试 System.out.print 是否有效(通常有效;-)对生产代码中的覆盖率没有帮助。

关于java - Println测试用例: println and expected output are the same,但测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43509232/

相关文章:

java - println 方法中的 true/false boolean 值

java - 如何在java中不使用+ concat()和StringBuffer来连接2个字符串

java - 重写 spring-security BadCredentialsException 的容器响应

java - 使用 Mockito java.lang.nullpointerexception 进行测试

java - println() 中的 == 函数

rust - 将 println 设为宏有什么好处?

java - 带有 goDaddy 证书的 Tomcat8.5 SSL 连接器

java - java可序列化的问题

java - 依赖注入(inject)和测试

java - JUnit 与 TestNG