这可能在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
现在我得到一些几乎没用的东西。但是,我想看到完整的enchilada,整个堆栈跟踪。但是我似乎找不到一种方法来做到这一点与JUnit除了我的测试用例在catch/try块中打印堆栈跟踪标准错误(丑陋):
@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,以便它打印任何未捕获异常的堆栈跟踪,而不必依赖于显式捕获/打印堆栈跟踪在我的测试用例代码*?
谢谢。
尝试将maven-surefire-plugin的useFile
参数设置为false。根据Surefire插件文档,这会将测试报告输出到控制台。
参见trimStackTrace
参数