Ank*_*gra 21 java junit exception
我们正在测试单元测试中的异常
@Test(expected=IOException.class)
public void test() {
// run some code that throws IOException.
}
Run Code Online (Sandbox Code Playgroud)
测试正在通过,但作为运行测试的maven构建的一部分,stacktrace进入控制台输出.无论如何,在测试中可以忽略此堆栈跟踪.
小智 18
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.1</version>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
将上面的代码放入pom.xml的插件部分.redirectTestOutputToFile
将从控制台输出中删除堆栈跟踪.显然,用你正在使用的版本替换surfire版本.
BTW redirectTestOutputToFile
参数在故障安全插件中也可用,因此您可以以相同的方式将其应用于集成测试.
没有什么好的方法可以做到这一点,无论如何也不值得。我假设打印的堆栈跟踪来自被调用的代码,而不是来自您的测试代码:
public class ExpectedExceptionTest {
@Test(expected = IOException.class)
public void test() throws Exception {
foobar();
}
public void foobar() throws IOException {
try {
throw new IOException();
} catch (IOException e) {
e.printStackTrace(System.err);
throw e;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,出现在 Maven 构建日志中的堆栈跟踪来自您尝试测试的方法的错误处理。您不想更改此错误处理。如果测试失败,那么您想知道发生了什么。
如果你改变它,那么它也会不必要地使被测代码复杂化。除了这个特定的测试,你总是希望堆栈跟踪出现。
那么,我们可以像其他地方建议的那样将 System.err 设置为 null 吗?不。如果你打电话
System.setErr(null);
Run Code Online (Sandbox Code Playgroud)
那么这将导致一个 NullPointerException
(具有上述错误处理)。
如果您使用 log4j 或类似工具进行日志记录,那么您可以拥有一个 @Rule
临时将日志记录级别设置为 INFO 以便异常不会出现在您的日志中。同样,如果测试失败,调试将不会出现在您最需要的时候。
我一直在我的项目构建输出中得到这些异常堆栈跟踪。我只是接受它并祝贺自己我正确地测试了错误条件:-)
归档时间: |
|
查看次数: |
14994 次 |
最近记录: |