1. Обзор
Spring предлагает множество функций, которые помогут нам в тестировании нашего кода. Иногда нам нужно использовать определенные свойства конфигурации, чтобы настроить нужный сценарий в наших тестовых случаях.
В этих ситуациях мы можем использовать аннотацию @TestPropertySource . С помощью этого инструмента мы можем определить источники конфигурации, которые имеют более высокий приоритет, чем любой другой источник, используемый в проекте.
Поэтому в этом коротком уроке мы увидим примеры, где мы используем эту аннотацию. Кроме того, мы проанализируем его поведение по умолчанию и основные атрибуты, которые он поддерживает.
Чтобы узнать больше о тестировании в Spring Boot, мы предлагаем ознакомиться с нашим учебником “Тестирование в Spring Boot”.
2. Зависимости
Самый простой способ включить все необходимые библиотеки в наш проект-это добавить артефакт spring-boot-starter-test в наш pom.xml файл:
org.springframework.boot spring-boot-starter-test test 2.0.5.RELEASE
Мы можем проверить Maven Central, чтобы убедиться, что мы используем последнюю версию библиотеки starter .
3. Как использовать @TestPropertySource
Давайте представим, что мы используем значение свойства, вводя его с помощью аннотации @Value Spring:
@Component public class ClassUsingProperty { @Value("${baeldung.testpropertysource.one}") private String propertyOne; public String retrievePropertyOne() { return propertyOne; } }
Затем мы будем использовать аннотацию @TestPropertySource class-level для определения нового источника конфигурации и переопределения значения этого свойства:
@RunWith(SpringRunner.class) @ContextConfiguration(classes = ClassUsingProperty.class) @TestPropertySource public class DefaultTest { @Autowired ClassUsingProperty classUsingProperty; @Test public void givenDefaultTPS_whenVariableRetrieved_thenDefaultFileReturned() { String output = classUsingProperty.retrievePropertyOne(); assertThat(output).isEqualTo("default-value"); } }
Как правило, всякий раз, когда мы используем эту тестовую аннотацию, мы также включаем @ContextConfiguration , чтобы загрузить и настроить ApplicationContext для сценария.
По умолчанию @TestPropertySource аннотация пытается загрузить свойства файл относительно класса, объявившего аннотацию.
В этом случае, например, если наш тестовый класс находится в пакете com.baeldung.testpropertysource , то нам понадобится файл com/baeldung/testpropertysource/DefaultTest.properties в нашем пути к классу.
Тогда давайте добавим его в нашу папку ресурсов:
# DefaultTest.properties baeldung.testpropertysource.one=default-value
Кроме того, мы можем изменить расположение файла конфигурации по умолчанию или добавить дополнительные свойства, которые будут иметь еще более высокий приоритет:
@TestPropertySource(locations = "/other-location.properties", properties = "baeldung.testpropertysource.one=other-property-value")
Наконец, мы можем указать, хотим ли мы наследовать locations и properties значения от суперклассов или нет. Следовательно, мы можем переключать атрибуты inheritLocations и inheritProperties , которые по умолчанию являются true .
4. Заключение
На этом простом примере мы узнали, как эффективно использовать аннотацию @TestPropertySource Spring.
Примеры различных сценариев мы можем найти в нашем репозитории Github .