2016-06-10 10 views
2

Ich versuche, eine Spring Boot-Anwendung zu erstellen, versuchen, an der Test-getriebenen Entwicklung zu bleiben. Mein Problem ist, dass Spring JPA in meinem Projekt enthalten ist, aber noch keine Datenquelle eingerichtet ist. Bevor ich die Abhängigkeit hinzufügte, konnte ich meine Komponententests erfolgreich ausführen.Führen Sie JUnit-Unit-Tests in Spring Boot-Anwendung ohne Bereitstellung von Datenquelle

Jetzt, da ich die Abhängigkeit hinzugefügt habe, schlägt der Versuch, meine Komponententests auszuführen, fehl, da eine Datenquelle für Spring Data nicht initialisiert werden kann.

Ich bin eher neu zu JUnit, Spring Boot und Mockito obwohl. Ich möchte in der Lage sein, meine Komponententests auszuführen, ohne eine Datenquelle zu haben und stattdessen alle meine Repositories zu verspotten.

Was ist der richtige Weg, dies zu tun?

+0

Bitte klären Sie Ihr spezifisches Problem oder fügen Sie zusätzliche Details hinzu, um genau zu markieren, was Sie brauchen. Wie es derzeit geschrieben wird, ist es schwer zu sagen, was genau Sie fragen. Informationen zur Klärung dieser Frage finden Sie auf der Seite "Fragen stellen". –

+0

Dieser Link könnte für Sie nützlich sein: http://stackoverflow.com/questions/34756264/spring-boot-with-datasource-when-testing –

+0

Erstellen Sie ein separates Profil für Testsuiten und deaktivieren Sie die automatische Konfiguration für JPA. – Vaelyr

Antwort

5

Wenn Sie eine SQL-Engine definieren, die häufig zum Testen verwendet wird (z. B. HSQL, Derby oder H2), sollte Spring Boot diese als Testabhängigkeit erkennen und die Datenquellen-Bean darüber konfigurieren. Um das zu tun, definiert nur solchen Motor mit Prüfumfang:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <scope>test</scope> 
</dependency> 

Problem stellt sich, wenn Sie die Produktion Datenquelle (z Postgres oder MySQL) einzuführen. In diesem Zustand müßten Sie

  • configure Testdatenquelle explizit mit @Primary Anmerkung
  • oder Testkonfigurationsdatei zur Verfügung stellen (z src/test/resources/application.properties), wo H2 wird konfiguriert.
4

Schritt eins. Fügen Sie zu pom.xml eine Art In-Memory-Datenbank hinzu. Zum Beispiel h2:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>1.4.191</version> 
    <scope>test</scope> 
</dependency> 

Dann Test-Datenquelle in Ihrem Test application.properties gelegen in (src/test/resources) konfigurieren:

spring.jpa.generate-ddl=false 
spring.jpa.hibernate.ddl-auto=none 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect 

spring.datasource.platform=h2 
spring.datasource.driverClassName=org.h2.Driver 
spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL;IGNORECASE=TRUE 
spring.datasource.username=SA 
spring.datasource.password= 

Das für den Betrieb h2 im Speicher mit mysql Unterstützung Modus nur Beispiel. Sie können jedoch auch andere Modi verwenden (sql support) oder diesen Parameter gar nicht einstellen.