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


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

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

4 75

4 ответа:

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

  1. если указать log4j.defaultInitOverride в false, он не будет настраивать log4j вообще.
  2. укажите путь к файлу конфигурации вручную самостоятельно и переопределите поиск пути к классам. Вы можете указать расположение файла конфигурации с помощью аргумент к java:

    -Dlog4j.configuration=<path to properties file>

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

  3. разрешить log4j сканировать путь к классу для файла конфигурации log4j во время теста. (по умолчанию)

см. также документации.

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

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

Я использую системные свойства в 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>