1. Обзор
Spring предоставляет множество функций, которые помогут нам в тестировании нашего кода. Иногда нам нужно использовать определенные свойства конфигурации, чтобы настроить желаемый сценарий в наших тестовых примерах.
В этих ситуациях мы можем использовать аннотацию @TestPropertySource
. С помощью этого инструмента мы можем определить источники конфигурации, которые имеют более высокий приоритет, чем любой другой источник, используемый в проекте.
Следовательно, в этом кратком руководстве мы увидим примеры, в которых мы используем эту аннотацию. Кроме того, мы проанализируем его поведение по умолчанию и основные атрибуты, которые он поддерживает.
Чтобы узнать больше о тестировании в Spring Boot, мы предлагаем ознакомиться с нашим руководством «Тестирование в Spring Boot» .
2. Зависимости
Самый простой способ включить все необходимые библиотеки в наш проект — добавить артефакт spring-boot-starter-test
в наш файл pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.6.1</version>
</dependency>
Мы можем проверить Maven Central, чтобы убедиться, что мы используем последнюю версию начальной библиотеки .
3. Как использовать @TestPropertySource
Давайте представим, что мы используем значение свойства, вводя его с помощью аннотации @Value
Spring:
@Component
public class ClassUsingProperty {
@Value("${foreach.testpropertysource.one}")
private String propertyOne;
public String retrievePropertyOne() {
return propertyOne;
}
}
Затем мы будем использовать аннотацию уровня класса @TestPropertySource , чтобы определить новый источник конфигурации и переопределить значение этого свойства:
@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.foreach.testpropertysource
, нам понадобится файл com/foreach/testpropertysource/DefaultTest.properties
в нашем пути к классам.
Давайте добавим его в нашу папку ресурсов:
# DefaultTest.properties
foreach.testpropertysource.one=default-value
Кроме того, мы можем изменить расположение файла конфигурации по умолчанию или добавить дополнительные свойства, которые будут иметь еще более высокий приоритет:
@TestPropertySource(locations = "/other-location.properties",
properties = "foreach.testpropertysource.one=other-property-value")
Наконец, мы можем указать, хотим ли мы наследовать местоположения
и значения свойств
от суперклассов или нет. Следовательно, мы можем переключать атрибуты inheritLocations
и inheritProperties
, которые по умолчанию имеют значение true .
4. Вывод
На этом простом примере мы узнали, как эффективно использовать аннотацию @TestPropertySource
Spring.
Мы можем найти примеры для различных сценариев в нашем репозитории Github .