强制 JUnit 显示未捕获的异常堆栈跟踪
2022-09-01 23:46:42
这可能在JUnit文档中已经很明显了,但似乎找不到它,也不记得是否有我即将描述的解决方案。
当我通过 maven () 运行测试用例时,意外异常的堆栈跟踪根本不会显示在标准错误中。我得到的只是一条消息,指示测试失败。mvn test
如果我的待测试代码引发一个未经检查的异常(比如 NPE),我的测试用例输出如下所示:
Tests in error:
testFoo(bar.Foo)
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
如果我的测试用例声明它可以抛出一个对象,并且我像这样包装运行时异常:Exception
@Test
public void testFoo() throws Exception
{
try{ // something funky
throw new NullPointerException();
} catch( RuntimeException ex ) {
throw new Exception(ex);
}
}
然后我们得到这个:
Tests in error:
testFoo(bar.Foo): java.lang.NullPointerException
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
现在我得到了一些几乎没有用处的东西。但是,我希望看到完整的玉米卷饼,整个堆栈跟踪。但是我似乎没有找到使用JUnit执行此操作的方法,除了在捕获/尝试块中笨拙地将堆栈跟踪打印到标准错误(丑陋)之外:
@Test
public void testFoo() throws Exception
{
try{ // something funky
throw new NullPointerException();
} catch( RuntimeException ex ) {
ex.printStackTrace(); // << this works, but it is ugly.
throw ex;
}
}
我讨厌这样做,因为它污染了(IMO)我的测试用例逻辑;它是手动的,我必须为每个测试用例都这样做(我宁愿把肘部润滑脂放进去,这样我就在那里和那里得到一个堆栈跟踪,而不是需要一个堆栈跟踪而没有它。
有没有办法利用/告诉JUnit,以便它打印任何未捕获异常的堆栈跟踪,而不必*依赖于在我的测试用例代码中显式捕获/打印堆栈跟踪*?
谢谢。