J'exécute des tests d'intégration pour mon application Spring Boot avec le plug-in Failsafe de Maven. Lorsque je crée un test simple comme celui-ci:
@RunWith (SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(App.class)
public class MyTestIT {
@Test
public void test() {
assertTrue (true);
}
}
Et puis exécutez mvn verify
Je vois les entrées de journal suivantes juste avant le démarrage de l'application Spring (par exemple, même avant la bannière Spring Boot):
Running org.....MyTestIT
2016-04-14 13:25:01.166 INFO ???? --- [ main]
or.sp.te.co.su.AbstractContextLoader :
Could not detect default resource locations for test class
[org....MyTestIT]: no resource found for suffixes
{-context.xml, Context.groovy}.
2016-04-14 13:25:01.175 INFO ???? --- [ main]
or.sp.te.co.su.DefaultTestContextBootstrapper :
Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
2016-04-14 13:25:01.185 INFO ???? --- [ main]
or.sp.te.co.su.DefaultTestContextBootstrapper : Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@57c758ac, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@a9cd3b1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@13e39c73, org.springframework.test.context.support.DirtiesContextTestExecutionListener@64cd705f, org.springframework.test.context.transaction.TransactionalTestExecutionListener@9225652, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@654f0d9c]
Suivi de la bannière Spring Boot. Les tests sont ensuite exécutés sans aucune erreur. Bien que ces messages soient imprimés avec un niveau de journal INFO et que les tests fonctionnent bien, je suppose que tout va bien, mais je trouve toujours ces messages irritants. Alors, y a-t-il quelque chose qui ne va pas dans ma configuration? Dois-je m'inquiéter de ces messages?
Même s'il n'y avait rien de mal, je voudrais quand même comprendre ce qui s'y passe et ce que signifient les messages.
Ma maven-failsafe-plugin
utilise simplement la configuration par défaut et mon App.Java
n'est qu'une simple classe annotée avec @SpringBootApplication
.
MISE À JOUR 1:
Voici la configuration de mes plugins de test:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Ignore any tests that are marked by the @IntegrationTest annotation of Spring Boot -->
<excludedGroups>org.springframework.boot.test.IntegrationTest</excludedGroups>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
J'ai aussi un spring-boot-starter-test
dépendance configurée et j'utilise spring-boot-devtools
. En outre, tout le reste n'est pas lié au test.
Le projet lui-même est assez standard, utilisant hibernate et mysql et web-mvc pour les points d'extrémité de repos. J'ai deux classes de configuration pour la sécurité du printemps sur le pass de classe.
Dans le main/resources
dossier J'ai un application.properties
fichier et un log4j2.xml. Il n'y a pas test/resources
dossier, mais quand je viens de copier le dossier principal/ressources dans test/resources
les messages de journal ci-dessus apparaissent toujours.
PDATE 2: Je viens de créer un petit exemple d'application essayant de recréer le problème, et il semble que la sortie de journal mentionnée commence à apparaître dès que je mets un log4j2.xml
fichier dans un dossier de ressources. J'ai essayé de le mettre dans src/main
ou src/test
ou les deux avec des effets identiques.
Il s'agit du comportement par défaut lors de l'exécution des tests d'intégration Spring.
De la documentation de référence
Si vous omettez à la fois les emplacements et les attributs de valeur de l'annotation @ContextConfiguration, la structure TestContext tentera de détecter un emplacement de ressource XML par défaut. Plus précisément, GenericXmlContextLoader et GenericXmlWebContextLoader détectent un emplacement par défaut en fonction du nom de la classe de test. Si votre classe est nommée com.example.MyTest, GenericXmlContextLoader charge votre contexte d'application à partir de "classpath: com/example/MyTest-context.xml".
Donc, ce n'est pas du tout lié à Maven, log4j ou au positionnement/assistance du dossier de ressources.
Dois-je m'inquiéter de ces messages?
Pas du tout, apparemment.
mais je trouve toujours ces messages irritants
Je ne sais pas si et comment désactiver cette vérification (vous pouvez l'éliminer en modifiant le niveau de journalisation de AbstractContextLoader
en WARN
).
Vous pouvez utiliser AnnotationConfigContextLoader
en combinaison avec @Configuration.
Voir ici pour plus de détails.
Vous pouvez annoter votre classe de test avec des configurations plus spécifiques pour le chargeur et utiliser Java Config
Quelque chose comme:
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = ScalaTestConfig.class)
Où la classe ScalaTestConfig est annotée avec:
@Configuration
@ComponentScan(basePackages = {"***", "***"})
Basé sur le lien de Kulasangar.