Я пытаюсь изучить Spring Boot и получить четкое представление о тестировании.
Я знаю, что @SpringBootTest загружает полный контекст, я не хочу этого делать .
Я знаю, что срезовые тесты (т. е. @WebMvcTest, @JdbcTest) внутренне используют @ExtendWith(SpringExtension.class),
Что, если мне просто нужен простой интегрированный тест с моими собственными bean-компонентами, и я также хотите загрузить свойства конфигурации, можно ли использовать это с @Value?
Я знаю, что могу использовать ReflectionTestUtils, но я подумал, что, поскольку Spring Extension загружает тестовый контекст, оно должно получить приложение Файл .properties?
Пока я получаю очень странный результат с @Value: он получает ключ вместо значения. Он отлично работает с @SpringBootTest, поэтому я знаю, что свойства загружаются нормально при полной версии приложения.
Вот мой код:
application.properties в источник/тест/ресурсы:
misc.test-prop-value=testPropValue
@ExtendWith(SpringExtension.class)
публичный класс ConfigPropertiesTest {
@Value( value = "${misc.test-prop-value}")
private String testPropValue;
@Value("${some.non.existent.value}")
private String nonExistentValue;
@Test
void testNonExistentValue() {
assertNull(nonExistentValue); // Fails, the value is: ${some.non.existent.value}
}
@Test
public void testConfigProperties() {
assertEquals("testPropValue", testPropValue); //Fails, the value is: ${misc.test-prop-value}
}
Почему @Value сам подбирает ключ?
Он отлично работает с @ SpringBootTest,
Я думал, поскольку @SpringExtension загружает контекст приложения:
@ExtendWith(SpringExtension.class)
public class SpringExtensionBasicTest {
@Autowired
private ApplicationContext applicationContext;
@Test
void contextLoads() throws Exception {
//GenericApplicationContext instance:
System.out.println("Context instance: " + applicationContext.getClass());
assertNotNull(applicationContext); // Test passes
}
}
Когда я расширяю базовый класс с @SpringBootTest,
Все работает нормально, загружается контекст, и даже возникает ошибка, когда some.non.existent.value свойство не найдено.
Но с расширением Spring поведение странное.
Может быть, это глупый вопрос, я чувствую, что это одна из тех вещей, где я нахожусь у меня на лице упущено что-то настолько очевидное, что никто этого даже не объяснил, но я этого не понимаю.
А также, если я хочу свой собственный срез-тест, но я все равно хочу, чтобы файл .properties загружался, как это происходит с @ Например, JdbcTest, как это будет работать
Изменить:
Мне нужно пройти два теста при использовании @TestPropertySource, но несуществующее значение это значение null для @SpringBootTest, все равно показывает тот же ключ:
@ExtendWith(SpringExtension.class)
@TestPropertySource(value = "classpath:application.properties")
public class ConfigPropertiesTest {
@Value( value = "${misc.test-prop-value}")
private String testPropValue;
@Value("${family.mother}")
private String mamaValue;
/**
* When a non-existent value is there,
* It is not null for some strange reason,
* But it still shows the key
*/
@Value("${some.non.existent.value}")
private String nonExistentValue;
@Test
void testNonExistentValue() {
//Still shows ${some.non.existent.value}
assertNull(nonExistentValue);
}
@Test
void testPropValue1() {
assertEquals("Mama-test", mamaValue); //Ok
}
@Test
public void testConfigProperties() {
assertEquals("testPropValue", testPropValue); //Ok
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ringextens
Как загрузить свойства из application.properties с помощью @ExtendWith(SpringExtension.class) ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как загрузить свойства из Application.properties с @extendwith (springextension.class)
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-