Перейти к основному содержимому

Краткое руководство по @TestPropertySource

· 2 мин. чтения

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 .