Переопределить приложение Spring-Boot по умолчанию.настройки свойств в тесте Junit
у меня есть приложение Spring-Boot, где свойства по умолчанию установлены в application.properties файл в пути к классам (src / main/resources / application.свойства.)
Я хотел бы переопределить некоторые настройки по умолчанию в моем тесте JUnit со свойствами, объявленными в test.properties file (src/test/resources/test.свойства)
у меня обычно есть специальный класс конфигурации для моих тестов Junit, например
package foo.bar.test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
}
я сначала подумал, что с помощью @PropertySource("classpath:test.properties") в классе TestConfig сделал бы трюк, но эти свойства не будут перезаписывать приложение.настройки свойств (см. Spring-Boot Reference Doc -23. Внешняя Конфигурация).
тогда я попытался использовать -Dspring.config.location=classpath:test.properties при вызове теста. Это было успешно , но я не хочу устанавливать это системное свойство для каждого выполнения теста. Таким образом, я положил его в код
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
static {
System.setProperty("spring.config.location", "classpath:test.properties");
}
}
который, к сожалению, снова не был успешным.
должно быть простое решение о том, как переопределить application.properties настройки в тестах JUnit с test.properties что я, должно быть, проглядели.
5 ответов:
можно использовать
@TestPropertySourceдля переопределения значений вapplication.properties. Из его javadoc:источники тестовых свойств можно использовать для выборочного переопределения свойств, определенных в источниках системных и прикладных свойств
например:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = ExampleApplication.class) @TestPropertySource(locations="classpath:test.properties") public class ExampleApplicationTests { }
вы также можете использовать мета-аннотации копирование конфигурации. Например:
@RunWith(SpringJUnit4ClassRunner.class) @DefaultTestAnnotations public class ExampleApplicationTests { ... } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @SpringApplicationConfiguration(classes = ExampleApplication.class) @TestPropertySource(locations="classpath:test.properties") public @interface DefaultTestAnnotations { }
Spring Boot автоматически загружается
src/test/resources/application.properties, Если используются следующие аннотации@RunWith(SpringRunner.class) @SpringBootTestИтак, переименовать
test.propertiesдоapplication.propertiesдля использования автоматической конфигурации.если вы *только* необходимо загрузить файл свойств (в среду) использование также может использовать следующее, как объяснено здесь
@RunWith(SpringRunner.class) @ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)[обновление: переопределение некоторых свойств для тестирования]
- добавить
src/main/resources/application-test.properties.- аннотировать тестовый класс с помощью
@ActiveProfiles("test").этой нагрузки
application.propertiesи затемapplication-test.propertiesсвойства в контекст приложения для тестового случая, согласно правилам, определенным здесь.
В противном случае мы можем изменить имя конфигуратора свойств по умолчанию, установив свойство
spring.config.name=testа затем имея ресурс пути к классуsrc/test/test.propertiesнаш родной экземплярorg.springframework.boot.SpringApplicationбудет автоматически настроен из этого отдельного теста.свойства, игнорируя свойства приложения;преимущество: автоматическая настройка тестов;
недостаток: разоблачение "spring.config.name" собственность в C. I. layer
ref: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
spring.config. name=application # Config file name
TLDR:
так что же было сделано, чтобы иметь стандарт
src/main/resources/application.propertiesиsrc/test/resources/application-default.propertiesгде я переопределить некоторые настройки для всех моих тестов.Вся История
я столкнулся с той же проблемой и до сих пор не использовал профили. Казалось бы, надоело делать это сейчас и вспоминать объявление профиля-который можно легко забыть.
хитрость заключается в том, чтобы использовать определенный профиль
application-<profile>.propertiesпереопределяет настройки в общем профиль. см https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
Comments