这可能在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,除了在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);并且它是手动的,我必须为每个测试用例做这件事(我宁愿把肘部油脂做,以便我在那里和那里得到堆栈跟踪,而不是需要堆栈跟踪而没有它。)< / p>
有没有办法利用/告诉JUnit,以便打印任何未捕获异常的堆栈跟踪,而不必依赖于在我的测试用例代码中明确捕获/打印堆栈跟踪 <?> < / p>
感谢。
答案 0 :(得分:8)
尝试将maven-surefire-plugin的useFile
参数设置为false。根据{{3}},将测试报告输出到控制台。
另请参阅trimStackTrace
参数。