web-dev-qa-db-fra.com

Comment importer des classes de configuration dans un @DataJpaTest dans un SpringBootTest?

J'ai une application SpringBoot et un package de configuration avec

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

Mais le PersistenceConfig n'est pas pris en compte dans un PersonRepositoryTest

@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {

    // Tests ...
}

Cependant, si je change de @DataJpaTest to @SpringBootTest, PersonRepositoryTest récupérera la configuration.

Ma structure de package est

- main
    - Java
        - config
              PersistenceConfig.Java
        - domain
              Person.Java
        - persistence
              PersonRepository.Java
          Application.Java // @SpringBootApplication

- test
    - Java
        - persistence
              PersonRepositoryTest.Java

Le Test des améliorations dans Spring Boot 1.4 suggère de tester la couche de persistance avec @DataJpaTest.

Observation: Les deux annotations de la classe Test n'importent toujours pas la configuration @ SpringBootTest @ DataJpaTest

Question 1: Lors du test de la couche de persistance avec @DataJpaTest Comment correctement (méthode recommandée dans Spring Boot) importe le package de configuration dans mes tests?

Question 2: Peut-il être une solution acceptable d'utiliser @SpringBootTest? Je suis conscient que @DataJpaTest est également une méta annotation avec une configuration automatique judicieuse pour ma base de données, y compris la gestion des transactions. Mais que faire si je n'en ai pas besoin?

11
Dachstein

Vous pouvez essayer ceci: Annotate PersistenceConfig avec @ComponentScan pour activer l'analyse des composants au printemps.

@Configuration
@EnableJpaAuditing
@ComponentScan(basePackages = "com.yourbasepackage")
public class PersistenceConfig {
}

En l'absence de configuration supplémentaire, @ComponentScan analysera par défaut le même package que la classe PersistenceConfig.

Et ajoutez l'annotation @Context-Configuration pour lui indiquer de charger sa configuration à partir de PersistenceConfig.class.

@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=PersistenceConfig.class)
public class PersonRepositoryTest {

    // Tests ...
}
3
georges van

Une solution consiste à utiliser @Import pour importer votre configuration dans la configuration effectuée par @DataJpaTest. Ceci est ma compréhension de @Import.

@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}

avec AuditConfiguration qui permet l'audit

@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
8
Sydney