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

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

 1. обзор

Spring предлагает множество функций, помогающих нам тестировать наш код. Иногда нам нужно использовать определенные свойства конфигурации для настройки желаемого сценария в наших тестовых примерах.

В этих ситуацияхwe can make use of the @TestPropertySource annotation. With this tool, we can define configuration sources that have higher precedence than any other source used in the project.

Следовательно, в этом коротком руководстве мы увидим примеры использования этой аннотации. Кроме того, мы проанализируем его поведение по умолчанию и основные поддерживаемые атрибуты.

Чтобы узнать больше о тестировании в Spring Boot, мы предлагаем взглянуть на наш‘Testing in Spring Boot' tutorial.

2. зависимости

Самый простой способ включить все необходимые библиотеки в наш проект - добавить артефактspring-boot-starter-test в наш файлpom.xml:


    org.springframework.boot
    spring-boot-starter-test
    test
    2.0.5.RELEASE

Мы можем проверить Maven Central, чтобы убедиться, что мы используем последнюю версиюstarter library.

3. Как использовать@TestPropertySource

Представим, что мы используем значение свойства, внедряя его с помощью аннотации@Value Spring:

@Component
public class ClassUsingProperty {

    @Value("${example.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 one, чтобы загрузить и настроитьApplicationContext для сценария.

По умолчанию аннотация@TestPropertySource пытается загрузить файлproperties относительно класса, объявившего аннотацию.

В этом случае, например, если наш тестовый класс находится в пакетеcom.example.testpropertysource, тогда нам понадобится файлcom/example/testpropertysource/DefaultTest.properties в нашем пути к классам.

Давайте добавим его в нашу папку ресурсов:

# DefaultTest.properties
example.testpropertysource.one=default-value

Кроме того, мы можем изменить расположение файла конфигурации по умолчанию или добавить дополнительные свойства, которые будут иметь еще более высокий приоритет:

@TestPropertySource(locations = "/other-location.properties",
  properties = "example.testpropertysource.one=other-property-value")

Наконец, мы можем указать, хотим ли мы наследовать значенияlocations иproperties от суперклассов или нет. Следовательно, мы можем переключать атрибутыinheritLocations иinheritProperties , которые по умолчанию являютсяtrue.

4. Заключение

На этом простом примере мы узнали, как эффективно использовать аннотацию@TestPropertySource Spring.

Мы можем найти примеры для различных сценариев вour Github repository.