2015-05-22 3 views
2

Я тестирую в тесте JUnit, что в некоторых случаях возникает особая ошибка с аннотацией @Test, и все идет хорошо.Проверка ошибок JUnit и протоколирование

@Test(expected = MyCustomException.class) 
public void MyTest(){ 
    ... 
} 

Однако, в моем коде, когда у меня есть такая ошибка, я использую регистратор (SLF4J) таким образом:

catch (IllegalArgumentException e) { 
     LOG.error("My custom exception occured with {}", inputVar, e); 
     throw new MyCustomException(inputVar, e); 
    } 

До сих пор поведение хорошо. Когда я создаю свое приложение с maven, все тесты выполняются. Когда описанный тест будет выполнен, тест будет отмечен как переданный, но у меня есть полная стек в моей оболочке с большой ОШИБКОЙ перед ним.

Мой вопрос в том, есть ли способ удалить журналы, когда я запускаю тесты (и, следовательно, не видеть их в оболочке)?

Второй вопрос: должен ли я даже попытаться? Или я должен просто проверить, что все тесты прошли, и не беспокоиться о трассировке стека и ошибке, когда я вижу ее при создании моего приложения? (меняя мой разум, а не меняя код)

+1

Вы не должны пытаться. Я думаю, вы должны попробовать проверить, что вы его запишете. Возможно, вы хотите издеваться над журналом и проверить поведение ... Но чем тест не удается, ваши журналы могут помочь вам разобраться, что происходит. – Jimilian

+0

Вы правы, я могу использовать mock logger для проверки моих журналов, но я бы сделал это в отдельном тесте, который не меняет «проблему» с этим тестом. Вы также правы для отладки, даже если я предпочитаю использовать отладчик рядом с тестом, чем использовать журналы в этом контексте. – gvo

+0

Очень редко регистрировать ошибку * и * вызывать исключение. Если код генерирует исключение, код, задерживающий исключение, должен регистрировать его – NamshubWriter

ответ

4

Ожидается, что для этого теста будет найден стек. Поэтому хорошо, что он зарегистрирован. Все работает так, как ожидалось, поэтому я не думаю, что вы должны что-то изменить. Особенно вы не должны менять код, чтобы тестовый журнал выглядел «лучше».

Изменение кода (возможно, некоторый флаг isTesting) только смущает код и изменяет поведение между тестированием и производством, и это именно то, чего вы не хотите при выполнении модульных тестов.

+0

Изменение кода не является вариантом, потому что оно работает хорошо, мне было интересно, могу ли я что-то настроить в тестах. – gvo

+0

Вы можете выполнить реконфигурацию slt4j с помощью кнопки, чтобы скрыть все сообщения журнала. Но это грязно и сродни тому, чтобы возиться с глобальной переменной. Действовать с осторожностью. – Brandon

0

Я должен заметить, что вы используете не лучший способ проверить исключение. Я думаю, что jUnit rule больше подходит для вас. Потому что у вас будет возможность проверить сообщение об исключении.

Смежные вопросы