Spring Свойства загрузки в 'application.yml' не загружаются с JUnit Test
Что я делаю неправильно? Я использую это небольшое автономное приложение, которое запускается и находит мой src/main/resources/config/application.yml
. Такая же конфигурация не работает с JUnit, см. Ниже:
@Configuration
@ComponentScan
@EnableConfigurationProperties
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class);
}
}
@Component
@ConfigurationProperties
public class Bean{
...
}
Следующие действия не работают, те же свойства в application.yml
не загружаются, а Bean
имеет только null
значения:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplication.class)
public class SomeTestClass {
...
}
Ответы
Ответ 1
Попробуйте следующее:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class,
initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
...
}
ИЗМЕНИТЬ
Для Spring Загрузочная версия 1.5+, SpringApplicationConfiguration
была удалена в пользу SpringBootTest
или прямого использования SpringBootContextLoader
.
Вы можете использовать параметр initializers
с аннотацией ContextConfiguration
.
Ответ 2
Здесь другой способ: [ Spring Boot v1.4.x]
@Configuration
@ConfigurationProperties(prefix = "own")
public class OwnSettings {
private String name;
Getter & setters...
}
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@BootstrapWith(SpringBootTestContextBootstrapper.class)
public class OwnSettingsTest {
@Autowired
private OwnSettings bean;
@Test
public void test() {
bean.getName();
}
}
Это работает ТОЛЬКО, если также существует файл 'application.properties'.
например. Проект maven:
src/main/resources/application.properties [ Файл может быть пустым, но обязательно!]
src/main/resources/application.yml [здесь ваш реальный файл конфигурации]
Ответ 3
Альтернатива в феврале 2017 года:
@SpringBootTest
@ContextConfiguration(classes = { TestApplication.class })
@RunWith(SpringRunner.class)
public class SomeTestClass {
...
}
скудный вариант (с тегом @SpringBootTest
):
@ContextConfiguration(classes = { TestApplication.class },
initializers = { ConfigFileApplicationContextInitializer.class })
@RunWith(SpringRunner.class)
public class SomeTestClass {
Ответ 4
Это работает
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {
@Test
public void contextLoads() {
}
}