在测试抛出异常消息的消息值时,如下所示:
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());
}
Run Code Online (Sandbox Code Playgroud)
异常及其堆栈跟踪在终端上可见.由于我的项目中有数百个类,因此终端只会成为异常消息堆栈跟踪的长列表.
有没有办法在运行Junit测试时抑制异常输出到屏幕/终端的堆栈跟踪?
PS:我不想在特定情况下禁止所有单元测试的日志记录.
我猜您正在测试的代码记录了一个异常并将其抛出。不要那样做
在非测试代码中捕获异常时,请执行以下操作之一:
如果执行此操作,则任何异常最多将被记录一次。
您还应该确保所有异常都记录在代码的顶层。这可能需要调用Thread.setDefaultUncaughtExceptionHandler()或`Thread.setUncaughtExceptionHandler()
在下面的测试中,您可以测试是否抛出异常。但是抛出异常后就不能进行测试(例如失败)。它们不会被执行。而且,它不会打印堆栈跟踪。
@Test(expected = MyException.class)
public void mustFailIfTheActionDoesNotExist() throws MyException{
getAction(UUID.randomUUID().toString());
fail("Must fail if the action does not exists");
}
Run Code Online (Sandbox Code Playgroud)
能够在抛出异常后进行测试。您可以查看ExpectedException 规则。
更新:
@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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在成功的情况下不会显示堆栈跟踪,您可以测试该消息。如果测试失败,它会打印堆栈跟踪。
| 归档时间: |
|
| 查看次数: |
5798 次 |
| 最近记录: |