2016-08-02 2 views
10

Я использую приложение для загрузки весны, которое запускает мой src/main/resources/config/application.yml.Загрузите различное application.yml в SpringBoot Test

Когда я запускаю мой тестовый пример по:

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

Испытуемые коды еще запустить свой файл application.yml для загрузки свойств. Интересно, можно ли запустить другой файл * .yml при запуске тестового примера.

ответ

15

Один из вариантов - работать с профилями. Создайте файл с именем приложения test.yml, переместить все свойства, необходимые для этих тестов в этот файл, а затем добавить @ActiveProfiles аннотацию к своему тестовому классу:

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

Имейте в виду, это будет дополнительно загрузить приложение -test.yml, поэтому все свойства, которые находятся в application.yml, по-прежнему будут применяться. Если вы этого не хотите, используйте либо профиль для них, либо переопределите их в своем приложении-test.yml.

+0

приятный ответ !. Он работает .... Большое спасибо – Exia

+1

Это правильный ответ. Аннотирование TestPropertySource работает только для .properties или .xml-файла. См. Раздел «Поддерживаемые форматы файлов» в https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html – Sam

4

Смотреть это: Spring @PropertySource using YAML

Я думаю, что третий ответ имеет то, что вы ищете, то есть отдельный POJO для отображения ваших ценностей YAML в:

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

Затем аннотировать тестовый класс с это:

@EnableConfigurationProperties(DbProperties.class) 
public class PropertiesUsingService { 

    @Autowired private DbProperties dbProperties; 

} 
9

Вы можете использовать @TestPropertySource, чтобы загрузить другой файл свойств/YAML

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

} 

ИЛИ если вы хотите переопределить только конкретные свойства/YAML можно использовать

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

Я попытался использовать эту аннотацию, но в тесте он по-прежнему ищет 'application.yml' вместо указанного мной. – ttt

+0

Не работает для меня с файлом application.yml. – selman

5

Вы можете установить ваши тестовые свойства в файле src/test/resources/config/application.yml. Тесты Spring Boot проведут свойства от application.yml файла в test.

+1

Фактически, в самом начале, файл yml для тестирования находится на этом пути, то есть «src/test/resources/config/application.yml». Но я не знаю, почему он не загружается, когда я запускал свой тестовый пример – Exia

+0

Я использовал Intellij IDEA и не имел ' **/*. Yml' в '' моего 'pom.xml'. Поскольку IDEA использует конфигурацию 'pom.xml' в качестве своей основной модели для компиляции вашего кода (даже вне' mvn' работает!), Это означало, что мой 'src/test/resources/application.yml' не был поднят мой тест, потому что он не присутствовал в 'target/test-classes'. – Rossiar

+0

Это должно быть отмечено как правильный ответ, потому что это относится к файлам YAML. Я подтвердил командой Spring Boot, что TestPropertySource не поддерживает файлы YAML. [Spring Boot JIRA] (https://jira.spring.io/browse/SPR-16563) – selman

Смежные вопросы