2016-12-27 3 views
3

Ich möchte ein Repository mit Spring Boot testen und möchte mit TestEntityManager überprüfen, ob das Repository wirklich das tut, was es tun soll.Einrichten eines benutzerdefinierten Schemas mit @DataJpaTest

Das ist der JUnit-Test:

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

    @Autowired 
    private TestEntityManager entityManager; 

    @Autowired 
    private MyRepository repository; 

    ... 

Für die anderen JUnit-Tests ich eine application-junit.properties-Datei, die ein Schema mit einigen Tabellen, Indizes, Sequenzen und Einschränkungen aufstellt:

spring.datasource.url=jdbc:h2:mem:testdb;Mode=Oracle;INIT=create schema if not exists testdb\\;SET SCHEMA testdb\\;runscript from 'classpath:create.h2.sql'; 
spring.datasource.username=sa 
spring.datasource.password= 
spring.datasource.platform=h2 
spring.jpa.hibernate.ddl-auto=none 
spring.datasource.continue-on-error=true 

#datasource config 
spring.database.driver-class-name=org.h2.Driver 
spring.database.jndi-name= 
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect 
spring.jpa.show-sql=true 

Nun, mit DataJpaTest scheint diese Konfiguration nicht verwendet zu werden. Auch wenn ich @ActiveProfiles ("junit") hinzufüge.

Wie kann ich den JUnit-Test verwenden meine create.h2.sql-Datei zum Einrichten der Tabellen verwenden?

Vielen Dank im Voraus, Nina

Antwort

5

Es ist nicht, weil @DataJpaTestyour configured datasource by an in-memory data source ersetzt.

Wenn Sie das nicht möchten, was bei diesem speziellen Profil eindeutig der Fall ist, müssen Sie Spring Boot anweisen, Ihre konfigurierte nicht zu überschreiben. Es gibt ein Beispiel in dem Dokument in dem Link, den ich oben angegeben habe. Im Wesentlichen sollte Ihr Test wie folgt aussehen:

@RunWith(SpringRunner.class) 
@DataJpaTest 
@ActiveProfiles("junit") 
@AutoConfigureTestDatabase(replace=Replace.NONE) 
public class MyRepositoryTest { 
    ... 
} 

Sie berücksichtigen sollten, eine Meta-Annotation Erstellen der letzten zwei zu teilen Anmerkungen, so dass Sie müssen nicht wieder wiederholen immer und immer (drei?).

Verwandte Themen