Где я могу настроить log4j в тестовом классе JUnit?

Глядя на последний тестовый пример JUnit, я написал, я вызвал метод log4j BasicConfigurator.configure() внутри конструктора класса. Это отлично работает для запуска только одного класса из команды Eclipse "запускать как JUnit test case". Но я понимаю, что это неверно: я уверен, что наш основной набор тестов запускает все эти классы из одного процесса, поэтому конфигурация log4j должна происходить где-то выше.

Но мне все же нужно запускать тестовый пример сам по себе несколько раз, и в этом случае я хочу настроить log4j. Где я должен поместить вызов конфигурации так, чтобы он запускался, когда тестовый сценарий выполнялся автономно, но не тогда, когда тестовый пример запускается как часть более крупного пакета?

Ответ 1

Класс LogManager определяет, какую конфигурацию log4j использовать в статическом блоке , который запускается при загрузке класса. Для конечных пользователей предусмотрено три варианта:

  • Не настраивать log4j; используйте конфигурацию по умолчанию.
  • Разрешить log4j сканировать путь к файлу конфигурации log4j во время теста.
  • Укажите путь к файлу конфигурации вручную самостоятельно и переопределите поиск в классе. Вы можете указать расположение файла конфигурации напрямую, используя следующий аргумент: java:

    -Dlog4j.configuration=<path to properties file>

    в конфигурации вашего тестового маршрутизатора.

См. также онлайн-документацию .

Ответ 2

Я вообще просто помещаю файл log4j.xml в src/test/resources и позволяю log4j найти его сам по себе: никакого кода не требуется, инициализация по умолчанию log4j заберет его. (Обычно я хочу, чтобы мои собственные регистраторы были "DEBUG" )

Ответ 3

Вы можете захотеть заглянуть в Простой ведение журнала для Java (SLF4J). Это фасад, который обтекает Log4j, который не требует начального вызова настройки, такого как Log4j. Также довольно легко отключить Log4j для Slf4j, поскольку различия API минимальны.

Ответ 4

Я использую системные свойства в log4j.xml:

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

и начать тесты с помощью:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemProperties>
            <property>
                <name>catalina.home</name>
                <value>${project.build.directory}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>