Краткое руководство по @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.