Нет хорошего способа сделать это, и оно того не стоит.Я предполагаю, что напечатанная трассировка стека происходит из вызываемого кода, а не из вашего тестового кода:
public class ExpectedExceptionTest {
@Test(expected = IOException.class)
public void test() throws Exception {
foobar();
}
public void foobar() throws IOException {
try {
throw new IOException();
} catch (IOException e) {
e.printStackTrace(System.err);
throw e;
}
}
}
Здесь, трассировка стека, которая появляется в журнале сборки maven, происходит из обработки ошибок метода, которыйты пытаешься проверить.Вы не хотите изменять эту обработку ошибок.Если тест не пройден, вы хотите знать, что произошло.
Если вы измените его, то это также излишне усложнит тестируемый код.Помимо этого конкретного теста, вы всегда хотите, чтобы появлялась трассировка стека.
Итак, можем ли мы установить для System.err значение null, как было предложено в другом месте?Нет. Если вы позвоните
System.setErr(null);
, то это приведет к NullPointerException
(с обработкой ошибок, описанной выше).
Если вы используете log4j или подобное для ведения журнала, то вы можетеиметь @Rule
, который временно устанавливает уровень ведения журнала на INFO, чтобы исключение не отображалось в ваших журналах.Опять же, отладка не появится, когда она вам больше всего понадобится, если тест не пройден.
Я постоянно получаю эти трассировки стека исключений в выводе (-ах) сборки моего проекта.Я просто принимаю это и поздравляю себя с тем, что правильно тестирую условия ошибки: -)