在JUnit测试中不显示抛出的异常消息的stacktrace

瓜拉卡什语:

在测试抛出异常消息的消息值时,如下所示:

public void mustFailIfTheActionDoesNotExist() {
        try {
            getAction(UUID.randomUUID().toString());

            fail("Must fail if the action does not exists");
        } catch (MyException ex) {
            Assert.assertEquals("Exception generated on action", ex.getMessage());
        }

异常及其堆栈跟踪在终端上可见。由于我的项目中有数百个类,因此终端只会变成一堆长长的异常消息堆栈。

当运行Junit测试时,是否有办法抑制异常输出到屏幕/终端的堆栈跟踪?

PS:我不想抑制所有单元测试的日志记录,只是在特定情况下。

selimssevgi:

在以下测试中,您可以测试是否引发了异常。但是在引发异常之后,您不能进行测试(例如失败)。它们将不会被执行,也不会显示stacktrace。

@Test(expected = MyException.class)
public void mustFailIfTheActionDoesNotExist() throws MyException{
     getAction(UUID.randomUUID().toString());
     fail("Must fail if the action does not exists");
}

为了能够在引发异常之后进行测试。您可以签出ExpectedException Rule

更新:

@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void shouldNotPrintStackTrace() throws ArithmeticException {
    exception.expect(ArithmeticException.class);
    exception.expectMessage(containsString("by zero"));
    System.out.println(10 / 0);
}

上面的代码在成功的情况下不显示stacktrace,您可以测试消息。如果测试失败,它将打印stacktrace。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章