这是我现在正在做的一个简单测试用例的代码:
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/