Println测试用例:println和预期输出相同,但测试失败

时间:2017-04-20 02:35:26

标签: 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

我很确定这是一件非常愚蠢的事情我已经过去了,但是我没有发现我缺少哪些明显的东西让这个测试用例工作。任何帮助将不胜感激。

感谢您抽出宝贵时间阅读我的问题!

2 个答案:

答案 0 :(得分:2)

关键是你的断言预期" \ n"在行尾。但换行确实取决于您的操作系统。

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

通过OP编辑评论:

  • 在实际应用程序中,通常不会写入System.out;如果有的话,你正在使用一些日志框架。
  • 检查输出看起来像完全一样没有多大意义。这意味着每次更改消息时,测试都会中断。没用。
  • 如果有的话,我宁愿确保一些记录器对象例如看到一个特定的日志调用,"包含"一些重要的关键词左右。
  • 在您的情况下,目前尚不清楚,您打算实现什么目标!你看,当你调用一些"方法测试&#34 ;;那里的代码被执行;当有一个System.out.println()调用时;当呼叫发生时,该呼叫会被计算。添加一个检查写作的测试用例确实对你的报道没有任何帮助。请记住:您衡量生产代码的覆盖范围。测试System.out.print是否有效(通常是;-)对生产代码中的覆盖范围没有帮助。

答案 1 :(得分:2)

显然,单元测试中的虚假空间是您尝试解决问题,如果没有它,问题仍然存在。 (见关于问题的评论。)

在这种情况下,问题很可能是您的系统的行分隔符不是简单的换行符。以下是如何将测试编写为独立于测试平台的;即在Windows,Linux和MacOSX上工作......

trim()

或者,您可以使用{{1}}剥离行终止符(以及任何其他前导/尾随空格)。