2011-01-10 1 views
20

Я использую slf4j, и я хочу, чтобы модуль тестировал мой код, чтобы убедиться, что сообщения об ошибках/сообщениях ошибок генерируются при определенных условиях. Я бы предпочел, чтобы это были строгие модульные тесты, поэтому я бы предпочел не затягивать конфигурацию протоколирования из файла, чтобы проверить, генерируются ли сообщения журнала. Издевательская структура, которую я использую, - Mockito.Каков наилучший способ для модульного тестирования сообщений журнала SLF4J?

+0

Поскольку SLF4J - это просто «фасад» для других реализаций ведения журнала, вы не можете его самостоятельно тестировать самостоятельно, вы также должны указать реализацию, которую используете. – darioo

+1

@ darioo - Неправда. Я мог бы добавить установщик в мой класс для передачи в журнал из теста, а затем передать в вымышленный экземпляр Logger и убедиться, что были сделаны соответствующие логические вызовы. Я просто надеялся получить более элегантное решение, чем добавлять набор методов только для тестирования и сделать мой экземпляр Logger незавершенным. –

+0

В целом, в целом отличная книга «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

ответ

9

Я думаю, что вы могли бы решить свою проблему с помощью пользовательского приложения. Создайте тестовое приложение, которое реализует org.apache.log4j.Appender, и установите ваш appender в log4j.properties и загрузите его при выполнении тестовых примеров.

Если вы перезвоните к тестовому жгуте от этого appender вы можете проверить записанные сообщения

+3

Было бы очень полезно, если бы вы могли предложить некоторые образцы кода. – kenshinji

+0

@kenshinji Пример приведен здесь: https://stackoverflow.com/a/1828268/2521769 –

1

Вместо издевательств SLF4J вы можете разместить важные звонки, которые вам нужны необходимо, чтобы протестировать их собственные методы, которые вы можете легко высмеять.

Если вы действительно хотите издеваться над SLF4J, я бы поспорил, что вы можете создать для него своего провайдера, который позволит вам поставлять ложный логгер со стороны SLF4J вместо того, чтобы вводить один из ваших объектов обслуживания.

0

Подобно @Zsolt, вы можете издеваться log4j Appender и установить его на Logger, а затем проверить вызовы Appender.doAppend(). Это позволяет вам протестировать без изменения реального кода.

10

Для тестирования slf4j, не полагаясь на определенную реализацию (например, log4j), вы можете предоставить свою собственную реализацию регистрации slf4j, как описано в this SLF4J FAQ. Ваша реализация может записывать сообщения, которые были занесены в журнал, а затем быть опрошены вашими модульными тестами для проверки.

slf4j-test упаковка делает именно это. Это реализация журнала slf4j в памяти, которая предоставляет методы для извлечения зарегистрированных сообщений.

5

Лучше тест реализация SLF4J, которая работает очень хорошо в среде с одновременным выполнением теста состоит https://github.com/portingle/slf4jtesting

Я подхватила на несколько дискуссий о тестировании журнала SLF4J и ограничениях существующих подходов теста, когда речь идет о к одновременному выполнению теста.

Я решил поместить свои слова в код и что git repo - результат.

+0

Надеюсь, вскоре появится третий ответ от человека, у которого есть еще лучшая тестовая реализация SLF4j ....;) – Adam

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