2016-08-02 22 views
10

Używam aplikacji rozruchowej, która uruchamia mój src/main/resources/config/application.yml.Załaduj inny plik application.yml w SpringBoot Test

Kiedy uruchomić mój przypadek testowy przez:

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

Kody testów nadal uruchomić mój plik application.yml załadować właściwości. Zastanawiam się, czy możliwe jest uruchomienie innego pliku * .yml podczas uruchamiania testu.

Odpowiedz

15

Jedną opcją jest praca z profilami. Utwórz plik o nazwie aplikacji test.yml, przenieść wszystkie właściwości potrzebne do tych badań do tego pliku, a następnie dodać @ActiveProfiles adnotacji do klasy testowej:

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

zdawać sobie sprawę, będzie to dodatkowo załadować aplikację -test.yml, więc wszystkie właściwości, które są w application.yml, nadal będą stosowane. Jeśli tego nie chcesz, możesz również użyć profilu dla nich lub zastąp go w pliku test-test.yml.

+0

dobra odpowiedź !. Działa .... Dziękuję bardzo – Exia

+1

To jest poprawna odpowiedź. Adnotacja TestPropertySource działa tylko dla pliku .properties lub .xml. Zobacz "Obsługiwane formaty plików" w https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html – Sam

4

Zobacz to: Spring @PropertySource using YAML

Myślę 3rd odpowiedź ma to, czego szukasz, to znaczy mieć osobne POJO mapować swoje wartości yaml do:

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

Następnie opisywanie swoją klasę testową z to:

@EnableConfigurationProperties(DbProperties.class) 
public class PropertiesUsingService { 

    @Autowired private DbProperties dbProperties; 

} 
9

Można użyć @TestPropertySource załadować inny plik właściwości/yaml

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

} 

lub jeśli chcesz ręcznym tylko specyficzne właściwości/YAML można użyć

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

Próbowałem użyć tej adnotacji, ale w teście nadal szuka 'application.yml' zamiast tego, który podaję. – ttt

+0

Nie działa dla mnie z plikiem application.yml. – selman

5

Można ustawić właściwości testowe w pliku src/test/resources/config/application.yml. Konta testowe Spring Boot pobierają właściwości z pliku application.yml w katalogu test.

+1

Właściwie, na samym początku plik yml do testowania znajduje się na tej ścieżce, tj. "Src/test/resources/config/application.yml" .Ale nie wiem, dlaczego nie jest on załadowany, gdy uruchomiłem test – Exia

+0

Używałem Intellij IDEA i nie miałem ' **/* yml' w '' mojego 'pom.xml'. Ponieważ IDEA używa konfiguracji 'pom.xml' jako swojego podstawowego modelu do kompilowania kodu (nawet poza' 'mvn' run!), Oznacza to, że mój' src/test/resources/application.yml' nie był odbierany przez mój test, ponieważ nie był obecny w 'target/test-classes'. – Rossiar

+0

To powinno być oznaczone jako poprawna odpowiedź, ponieważ ma to miejsce w przypadku plików YAML. Potwierdziłem w Spring Boot Team, że TestPropertySource nie obsługuje plików YAML. [Spring Boot JIRA] (https://jira.spring.io/browse/SPR-16563) – selman

Powiązane problemy