it-swarm.com.de

Wie importiere ich Konfigurationsklassen in einem @DataJpaTest in einem SpringBootTest?

Ich habe eine SpringBoot Application und ein Config-Paket mit

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

Die PersistenceConfig wird jedoch nicht in einem PersonRepositoryTest abgeholt.

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

    // Tests ...
}

Wenn ich jedoch von @DataJpaTest to @SpringBootTest wechsle, wird PersonRepositoryTest die Konfiguration abholen.

Meine Paketstruktur ist

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

- test
    - Java
        - persistence
              PersonRepositoryTest.Java

Die Verbesserungen von Testing in Spring Boot 1.4 schlagen vor, die Persistenzschicht mit @DataJpaTest zu testen

Observation: Wenn Sie beide Anmerkungen in der Test-Klasse vornehmen, importieren Sie immer noch nicht die Konfiguration @ SpringBootTest @ DataJpaTest

Frage 1: Beim Testen der Persistence Layer mit @DataJpaTest Wie importiere ich richtig (bewährter Weg in Spring Boot) das Konfigurationspaket in meine Tests?

Frage 2: Kann es eine akzeptable Umgehung sein, wenn Sie @SpringBootTest verwenden? Mir ist bekannt, dass @DataJpaTest auch eine Meta-Annotation mit einer sinnvollen automatischen Konfiguration für meine Datenbank einschließlich der Transaktionsverwaltung ist. Aber was, wenn ich es nicht brauche?

11
Dachstein

Sie können Folgendes versuchen: Annotieren Sie PersistenceConfig mit @ComponentScan, um das Scannen von Komponenten in Spring zu aktivieren.

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

Ohne weitere Konfiguration scannt @ComponentScan standardmäßig dasselbe Paket wie die PersistenceConfig-Klasse.

Fügen Sie die Annotation @Context-Configuration hinzu, um die Konfiguration aus der PersistenceConfig.class-Klasse zu laden.

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

    // Tests ...
}
3
georges van

Eine Lösung ist die Verwendung von @Import, um Ihre Konfiguration in die von @DataJpaTest vorgenommene Konfiguration zu importieren. Dies ist mein Verständnis von @Import.

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

mit AuditConfiguration, das die Überwachung ermöglicht

@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
8
Sydney

Nach @georges van post habe ich herausgefunden, dass ALLE Konfigurationsklassen auch aufgenommen wird, indem nur eine Zeile im Test hinzugefügt wird:

@RunWith( SpringRunner.class )
@DataJpaTest
@ComponentScan(basePackages = "com.basepackage.config")
public class PersonRepositoryTest {

    // Tests ...
}

Wenn nur jemand EINE bestimmte Konfigurationsklasse möchte, können Sie Folgendes tun:

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

    // Tests ...
}

Oder mehrere Klassen mit:

@ContextConfiguration(classes={MyConfig1.class, MyConfig2.class})

0
Dachstein