Où puis-je configurer log4j dans une classe de test JUnit?

En regardant le dernier cas de test JUnit que j’ai écrit, j’ai appelé la méthode BasicConfigurator.configure () de log4j dans le constructeur de la classe. Cela a bien fonctionné pour exécuter cette classe unique à partir de la commande “Exécuter en tant que test JUnit” d’Eclipse. Mais je me rends compte que c’est incorrect: je suis presque sûr que notre suite de tests principale exécute toutes ces classes à partir d’un processus, et que la configuration de log4j devrait donc se produire quelque part.

Mais je dois encore exécuter un cas de test par lui-même, auquel cas je veux configurer log4j. Où dois-je mettre l’appel de configuration pour qu’il soit exécuté lorsque le scénario de test s’exécute en mode autonome, mais pas lorsque le scénario de test est exécuté dans le cadre d’une suite plus grande?

La classe LogManager détermine la configuration log4j à utiliser dans un bloc statique qui s’exécute lorsque la classe est chargée. Il existe trois options pour les utilisateurs finaux:

  1. Si vous spécifiez log4j.defaultInitOverride à false, il ne configurera pas du tout log4j.
  2. Spécifiez vous-même le chemin d’access au fichier de configuration et remplacez la recherche classpath. Vous pouvez spécifier l’emplacement du fichier de configuration directement en utilisant l’argument suivant pour java :

    -Dlog4j.configuration=

    dans votre configuration de coureur de test.

  3. Autoriser log4j à parsingr le classpath pour un fichier de configuration log4j lors de votre test. (le défaut)

Voir aussi la documentation en ligne .

Je mets généralement un fichier log4j.xml dans src / test / resources et laissez log4j le trouver lui-même: aucun code requirejs, l’initialisation log4j par défaut le récupérera. (Je veux généralement définir mes propres enregistreurs sur ‘DEBUG’ de toute façon)

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

J’utilise les propriétés du système dans log4j.xml:

 ...  ... 

et commencer les tests avec:

  org.apache.maven.plugins maven-surefire-plugin 2.16    catalina.home ${project.build.directory}