89 votes

Où configurer log4j dans une classe de test JUnit?

En regardant le dernier cas de test JUnit je l'ai écrit, je l'ai appelé log4j est BasicConfigurator.méthode configure() dans le constructeur de classe. Qui a bien fonctionné pour l'exécution de cette seule classe à partir d'Eclipse "exécuter en tant qu'cas de test JUnit de la commande". Mais je réalise que c'est incorrect: je suis sûr que notre principal suite de test s'exécute toutes les classes d'un processus, et par conséquent de configuration log4j qui devrait arriver plus haut quelque part.

Mais j'ai encore besoin de courir un cas de test par lui-même, à certains moments, dans ce cas, je veux log4j configuré. Où dois-je mettre de la configuration d'appel afin qu'il soit exécuté lorsque le scénario de test autonome, mais pas dans le cas de test est exécuté en tant que partie d'un ensemble plus large?

63voto

araqnid Points 33350

En général, je viens de mettre un fichier log4j.xml dans src / test / resources et de laisser log4j le trouver par lui-même: aucun code requis, l'initialisation par défaut de log4j le récupérera. (Je souhaite généralement configurer mes propres enregistreurs sur 'DEBUG' de toute façon)

51voto

Paul Morie Points 6956

L' LogManager classe détermine log4j config pour une utilisation dans un bloc statique qui s'exécute lorsque la classe est chargée. Il y a trois options destinées aux utilisateurs finaux:

  1. Ne configurez pas log4j; utiliser la configuration par défaut.
  2. Permettre log4j pour analyser le chemin d'un fichier de configuration log4j lors de votre test.
  3. Spécifiez le chemin d'accès au fichier de configuration manuellement vous-même et remplacer le classpath de recherche. Vous pouvez spécifier l'emplacement du fichier de configuration directement en utilisant l'argument suivant java:

    -Dlog4j.configuration=<path to properties file>

    dans votre lanceur de test de configuration.

Voir aussi la documentation en ligne.

6voto

James McMahon Points 14356

Vous voudrez peut-être examiner Simple Logging Facade pour Java (SLF4J) . C'est une façade qui entoure Log4j et ne nécessite pas un appel de configuration initiale comme Log4j. Il est également assez facile de changer Log4j pour Slf4j car les différences d’API sont minimes.

5voto

gavenkoa Points 6974

J'utilise les propriétés système dans jog4j.xml:

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

et commencez les tests avec:

 <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>
 

3voto

Yishai Points 42417

Voici un code qui fait ça (il suffit de chercher "isConfigured").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X