Я использую slf4j, и я хочу, чтобы модуль тестировал мой код, чтобы убедиться, что сообщения об ошибках/сообщениях ошибок генерируются при определенных условиях. Я бы предпочел, чтобы это были строгие модульные тесты, поэтому я бы предпочел не затягивать конфигурацию протоколирования из файла, чтобы проверить, генерируются ли сообщения журнала. Издевательская структура, которую я использую, - Mockito.Каков наилучший способ для модульного тестирования сообщений журнала SLF4J?
ответ
Я думаю, что вы могли бы решить свою проблему с помощью пользовательского приложения. Создайте тестовое приложение, которое реализует org.apache.log4j.Appender
, и установите ваш appender в log4j.properties
и загрузите его при выполнении тестовых примеров.
Если вы перезвоните к тестовому жгуте от этого appender
вы можете проверить записанные сообщения
Было бы очень полезно, если бы вы могли предложить некоторые образцы кода. – kenshinji
@kenshinji Пример приведен здесь: https://stackoverflow.com/a/1828268/2521769 –
Вместо издевательств SLF4J вы можете разместить важные звонки, которые вам нужны необходимо, чтобы протестировать их собственные методы, которые вы можете легко высмеять.
Если вы действительно хотите издеваться над SLF4J, я бы поспорил, что вы можете создать для него своего провайдера, который позволит вам поставлять ложный логгер со стороны SLF4J вместо того, чтобы вводить один из ваших объектов обслуживания.
Подобно @Zsolt, вы можете издеваться log4j Appender
и установить его на Logger
, а затем проверить вызовы Appender.doAppend()
. Это позволяет вам протестировать без изменения реального кода.
Для тестирования slf4j, не полагаясь на определенную реализацию (например, log4j), вы можете предоставить свою собственную реализацию регистрации slf4j, как описано в this SLF4J FAQ. Ваша реализация может записывать сообщения, которые были занесены в журнал, а затем быть опрошены вашими модульными тестами для проверки.
slf4j-test упаковка делает именно это. Это реализация журнала slf4j в памяти, которая предоставляет методы для извлечения зарегистрированных сообщений.
Лучше тест реализация SLF4J, которая работает очень хорошо в среде с одновременным выполнением теста состоит https://github.com/portingle/slf4jtesting
Я подхватила на несколько дискуссий о тестировании журнала SLF4J и ограничениях существующих подходов теста, когда речь идет о к одновременному выполнению теста.
Я решил поместить свои слова в код и что git repo - результат.
Надеюсь, вскоре появится третий ответ от человека, у которого есть еще лучшая тестовая реализация SLF4j ....;) – Adam
Поскольку SLF4J - это просто «фасад» для других реализаций ведения журнала, вы не можете его самостоятельно тестировать самостоятельно, вы также должны указать реализацию, которую используете. – darioo
@ darioo - Неправда. Я мог бы добавить установщик в мой класс для передачи в журнал из теста, а затем передать в вымышленный экземпляр Logger и убедиться, что были сделаны соответствующие логические вызовы. Я просто надеялся получить более элегантное решение, чем добавлять набор методов только для тестирования и сделать мой экземпляр Logger незавершенным. –
В целом, в целом отличная книга «Growing Object Oriented Software» содержит главу об модульном тестировании ведения журнала. Это не совсем убедительно, но это, безусловно, хорошо продуманно, и стоит прочитать (http://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_1 ? ie = UTF8 & s = books & qid = 1294688741 & sr = 8-1) – skaffman