Рубрики
Без рубрики

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

Узнайте, как эффективно использовать аннотацию @TestPropertySource Spring.

Автор оригинала: Ger Roza.

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 .