Ведение журнала является популярным решением для демонстрации того, что программное обеспечение делает во время работы.
Но что происходит с журналированием, когда мы тестируем наше приложение с помощью jUnit / TestNG?
Во время выполнения автоматических тестов нам обычно не интересно видеть сообщения регистрации, потому что наш основной интерес — результаты теста.
Было бы неплохо иметь возможность отключить регистрацию сообщений во время стандартных автоматических тестов.
Напротив, в некоторых случаях регистрация сообщений может быть полезна во время тестирования. Типичный пример — когда мы кодируем недостающие тесты для некоторого унаследованного кода, к которому мы не хотим прикасаться, прежде чем иметь хорошее покрытие тестами. В этом случае регистрация сообщений на консоли может помочь нам понять код и как он работает.
Таким образом, мы можем выделить три варианта использования:
- Режим работы , когда приложение выполняется: ведение журнала включено и настроено в соответствии с требованиями приложения
- Тестовый режим выполнения , когда автоматизированные тесты выполняются все вместе: протоколирование сообщений должно быть отключено
- Тестовый режим создания , когда мы создаем новые тесты: сообщения регистрации полезны, но было бы хорошо иметь их в консоли
Давайте посмотрим на пример, основанный на Maven и SLF4J , популярном фасаде.
- Полный проект можно найти здесь .
Типичная конфигурация SLF4J в проекте pom.xml
следующая:
01
02
03
04
05
06
07
08
09
10
11
|
< dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-api</ artifactId > < version >${slf4j.version}</ version > </ dependency > < dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-log4j12</ artifactId > < version >${slf4j.version}</ version > < scope >runtime</ scope > </ dependency > |
зависимость slf4-api
является основной библиотекой SLF4J, а вторая, slf4j-log4j12
, ссылается на один из возможных механизмов ведения журналов ( LOG4J ), который может работать ниже SLF4J.
Это конфигурация режима работы . В этом примере ресурсы проекта будут содержать файл свойств LOG4J, который определяет, что, как и где LOG4J должен регистрировать.
Та же самая ситуация происходит, когда мы используем другой механизм ведения журнала, такой как java.util.logging (JDK) и Logback. Смотрите руководство Slf4J для более подробной информации.
В режиме выполнения теста нам не нужна регистрация, поэтому мы можем просто добавить следующую зависимость теста области
1
2
3
4
5
6
|
< dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-nop</ artifactId > < version >${slf4j.version}</ version > < scope >test</ scope > </ dependency > |
Регистратор NOP (slf4j-nop) просто отбрасывает все записи.
Важно : порядок зависимостей в pom.xml
является значительным. Поместите зависимость slf4j-nop
сразу после зависимости slf4-api
чтобы она использовалась во время тестов, даже если в зависимости есть другой механизм ведения журнала.
Когда в pom.xml
pom.xml есть несколько зависимостей от pom.xml
, SLF4J все равно покажет сообщение, подобное следующему:
1
2
3
4
5
|
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar: file :.m2 /repository/org/slf4j/slf4j-nop/1 .7.12 /slf4j-nop-1 .7.12.jar! /org/slf4j/impl/StaticLoggerBinder .class] SLF4J: Found binding in [jar: file :.m2 /repository/org/slf4j/slf4j-log4j12/1 .7.12 /slf4j-log4j12-1 .7.12.jar! /org/slf4j/impl/StaticLoggerBinder .class] SLF4J: See http: //www .slf4j.org /codes .html #multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory] |
Подводя итог, можно привести полный пример конфигурации:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
< dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-api</ artifactId > < version >${slf4j.version}</ version > </ dependency > < dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-nop</ artifactId > < version >${slf4j.version}</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-log4j12</ artifactId > < version >${slf4j.version}</ version > < scope >runtime</ scope > </ dependency > |
Опять же, последняя зависимость должна быть скорректирована в соответствии с желаемым механизмом ведения журнала.
Как я уже упоминал ранее, регистрация может быть полезна при создании новых тестов. В этом случае ( тестовый режим создания ) мы можем временно заменить slf4j-nop
slf4j-simple
которая включает простой регистратор SLF4J .
Сообщения журнала теперь будут отображаться в окне консоли во время выполнения тестов как сообщения System.err
. Файл конфигурации не требуется.
По умолчанию Simple logger не регистрирует сообщения отладки. Стандартный уровень ведения журнала — INFO.
Вы можете настроить поведение Simple logger, используя системные переменные, описанные здесь .
Умный способ определить конфигурацию Simple logger — использовать [раздел конфигурации плагина Surefire] ( http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html ):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
< build > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-surefire-plugin</ artifactId > < version >2.18.1</ version > < configuration > < systemPropertyVariables > < org.slf4j.simpleLogger.defaultLogLevel >DEBUG</ org.slf4j.simpleLogger.defaultLogLevel > < org.slf4j.simpleLogger.showDateTime >true</ org.slf4j.simpleLogger.showDateTime > </ systemPropertyVariables > </ configuration > </ plugin > </ plugins > </ build > |
В разделе systemPropertyVariables мы можем создать теги с именем переменной Simple logger. В приведенном выше примере включены протоколы DEBUG и timestamp.
Ссылка: | Учебное пособие: ведение журнала во время тестов от нашего партнера по JCG Гуальтьеро Теста в блоге Гуалтиеро Теста . |