web-dev-qa-db-fra.com

Test d'intégration de Spring: impossible de détecter les emplacements de ressources par défaut

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.

9
lanoxx

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

8
Ori Dar

Vous pouvez utiliser AnnotationConfigContextLoader en combinaison avec @Configuration.

Voir ici pour plus de détails.

3
abhi

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.

0
AlexGera