Глава 2: Аннотации — @TestPropertySource
@TestPropertySource[javadoc-TestPropertySource] можно использовать для того, чтобы перекрывать свойства, которые поступают из системных переменных окружения, Java-системных свойств или [@PropertySource][javadoc-PropertySource].
При этом @TestPropertySource(properties=...)
имеет более высокий приоритет, чем @TestPropertySource(locations=...)
.
С его помощью мы можем легко настраивать и имитировать конфигурации в тестовом коде (например, изменять разделитель каталогов операционной системы, источник данных и т. д.).
Пример 1: Использование Spring Testing Tool
Сначала мы используем [@PropertySource][javadoc-PropertySource], чтобы загрузить внешний файл свойств, [PropertySourceConfig][src-ex1-PropertySourceConfig]:
@Configuration
@PropertySource("classpath:me/chanjar/annotation/testps/ex1/property-source.properties")
public class PropertySourceConfig {
}
foo=abc```
Затем мы используем [@TestPropertySource][javadoc-TestPropertySource], чтобы перекрыть это свойство:
```java
@TestPropertySource(properties = { "foo=xyz" ...
Наконец, мы тестируем успешность перекрытия (результат успешный):
@Test
public void testOverridePropertySource() {
assertEquals(environment.getProperty("foo"), "xyz");
}
Мы также проводим дополнительные тесты с @TestPropertySource, вы можете изучить их самостоятельно. Чтобы вам было легче наблюдать за тем, как [@TestPropertySource][javadoc-TestPropertySource] перекрывает системные переменные окружения и Java-системные свойства, мы сначала выводим их значения.
Исходный код [TestPropertyTest][src-ex1-TestPropertyTest]:
@ContextConfiguration(classes = PropertySourceConfig.class)
@TestPropertySource(
properties = { "foo=xyz", "bar=uvw", "PATH=aaa", "java.runtime.name=bbb" },
locations = "classpath:me/chanjar/annotation/testps/ex1/test-property-source.properties"
)
public class TestPropertyTest extends AbstractTestNGSpringContextTests implements EnvironmentAware {
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
Map<String, Object> systemEnvironment = ((ConfigurableEnvironment) environment).getSystemEnvironment();
System.out.println("=== System Environment ===");
System.out.println(getMapString(systemEnvironment));
System.out.println();
System.out.println("=== Java System Properties ===");
Map<String, Object> systemProperties = ((ConfigurableEnvironment) environment).getSystemProperties();
System.out.println(getMapString(systemProperties));
}
@Test
public void testOverridePropertySource() {
assertEquals(environment.getProperty("foo"), "xyz");
}
@Test
public void testOverrideSystemEnvironment() {
assertEquals(environment.getProperty("PATH"), "aaa");
}
@Test
public void testOverrideJavaSystemProperties() {
assertEquals(environment.getProperty("java.runtime.name"), "bbb");
}
@Test
public void testInlineTestPropertyOverrideResourceLocationTestProperty() {
assertEquals(environment.getProperty("bar"), "uvw");
}
private String getMapString(Map<String, Object> map) {
return String.join("\n",
map.keySet().stream().map(k -> k + "=" + map.get(k)).collect(toList())
);
}
}
Пример 2: Использование Spring Boot Testing Tool
[@TestPropertySource][javadoc-TestPropertySource] также может использоваться вместе с [@SpringBootTest][javadoc-SpringBootTest].
Исходный код см. в [TestPropertyTest][src-ex2-TestPropertyTest]:
@SpringBootTest(classes = PropertySourceConfig.class)
@TestPropertySource(
properties = { "foo=xyz", "bar=uvw", "PATH=aaa", "java.runtime.name=bbb" },
locations = "classpath:me/chanjar/annotation/testps/ex1/test-property-source.properties"
)
public class TestPropertyTest extends AbstractTestNGSpringContextTests implements EnvironmentAware {
// ...
}
Справочные документы
В запросе приведены ссылки на документацию по тестированию программного обеспечения с использованием Spring.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )