2016-08-02 13 views
10

Ich benutze eine Spring-Boot-App, die meine src/main/resources/config/application.yml ausführt.Lade verschiedene application.yml in SpringBoot Test

Wenn ich meinen Testfall ausgeführt von:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 
public class MyIntTest{ 
} 

Die Testcodes noch meine application.yml Datei ausführen Eigenschaften zu laden. Ich frage mich, ob es möglich ist, eine andere * .yml-Datei auszuführen, wenn Sie den Testfall ausführen.

Antwort

15

Eine Option ist die Arbeit mit Profilen. Erstellen Sie eine Datei mit dem Namen applikations test.yml, verschieben Sie alle Eigenschaften, die Sie für diese Tests müssen diese Datei und fügen Sie dann die @ActiveProfiles Anmerkung zu Ihrer Testklasse:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 
@ActiveProfiles("test") // Like this 
public class MyIntTest{ 
} 

Seien Sie sich bewusst, es lädt zusätzlich die Anwendung -test.yml, sodass alle Eigenschaften, die sich in application.yml befinden, weiterhin angewendet werden. Wenn Sie das nicht möchten, verwenden Sie entweder ein Profil für diese oder überschreiben Sie es in Ihrer Anwendung test.yml.

+0

nette Antwort !. Es funktioniert .... Vielen Dank – Exia

+1

Dies ist die richtige Antwort. Die Annotation TestPropertySource funktioniert nur für die Datei .properties oder .xml. Siehe "Unterstützte Dateiformate Abschnitte" in https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html – Sam

4

sehen: Spring @PropertySource using YAML

ich denke, die dritte Antwort hat das, was Sie suchen, dh sie haben einen separaten POJO Ihre yaml Werte in zur Karte:

@ConfigurationProperties(path="classpath:/appprops.yml", name="db") 
public class DbProperties { 
    private String url; 
    private String username; 
    private String password; 
... 
} 

dann Ihre Testklasse mit Anmerkungen versehen mit dies:

@EnableConfigurationProperties(DbProperties.class) 
public class PropertiesUsingService { 

    @Autowired private DbProperties dbProperties; 

} 
9

können Sie verwenden @TestPropertySource unterschiedliche Eigenschaften/yaml Datei

@TestPropertySource(locations="classpath:test.properties") 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(Application.class) 
public class MyIntTest{ 

} 

ODER wenn Sie nur bestimmte Eigenschaften/yaml zu überschreiben möchten, laden Sie

@TestPropertySource(
     properties = { 
       "spring.jpa.hibernate.ddl-auto=validate", 
       "liquibase.enabled=false" 
     } 
) 
+1

Ich habe versucht, diese Anmerkung aber im Test Es sucht immer noch nach der 'application.yml' anstelle der angegebenen 'application.yml'. – ttt

+0

Funktioniert bei mir nicht mit der application.yml-Datei. – selman

5

Sie können einstellen, verwenden können Ihre Testeigenschaften in src/test/resources/config/application.yml Datei. Spring Boot-Testfälle nehmen Eigenschaften von application.yml Datei in Test Verzeichnis.

+1

Eigentlich befindet sich die YML-Datei zum Testen zuerst auf diesem Pfad, dh "src/test/resources/config/application.yml". Aber ich weiß nicht, warum sie nicht geladen wird, wenn ich meinen Testfall ausgeführt habe – Exia

+0

Ich benutzte Intellij IDEA und hatte nicht ' **/*. Yml' in der '' meiner 'pom.xml'. Da IDEA die 'pom.xml'-Konfiguration als primäres Modell zum Kompilieren des Codes verwendet (auch außerhalb von 'mvn' läuft!), Bedeutete dies, dass meine' src/test/resources/application.yml 'nicht von mir aufgenommen wurde mein Test, weil er in 'target/test-classes' nicht vorhanden war. – Rossiar

+0

Dies sollte als korrekte Antwort markiert werden, da dies für YAML-Dateien der Fall ist. Ich habe mit Spring Boot Team bestätigt, dass TestPropertySource keine YAML-Dateien unterstützt. [Spring Boot JIRA] (https://jira.spring.io/browse/SPR-16563) – selman

Verwandte Themen