property from application java spring junit spring-boot spring-test

java - from - spring boot value properties



Las propiedades Spring Boot en ''application.yml'' no se cargan desde JUnit Test (4)

¿Qué estoy haciendo mal? Estoy usando esta pequeña aplicación independiente que se ejecuta y encuentra mi src/main/resources/config/application.yml . La misma configuración no funciona desde JUnit, ver a continuación:

@Configuration @ComponentScan @EnableConfigurationProperties public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class); } } @Component @ConfigurationProperties public class Bean{ ... }

Lo siguiente no funciona, las mismas propiedades en application.yml no se cargan y Bean solo tiene valores null :

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestApplication.class) public class SomeTestClass { ... }


Esto funciona

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() { } }


Aquí hay otra forma: [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(); } }

Esto funciona SÓLO si también existe el archivo ''application.properties''.

por ejemplo, proyecto maven:

src / main / resources / application.properties [¡ El archivo puede estar vacío pero es obligatorio! ]
src / main / resources / application.yml [aquí está su archivo de configuración real]


Alternativa en febrero de 2017:

@SpringBootTest @ContextConfiguration(classes = { TestApplication.class }) @RunWith(SpringRunner.class) public class SomeTestClass { ... }

la variante magra (sin @SpringBootTest ):

@ContextConfiguration(classes = { TestApplication.class }, initializers = { ConfigFileApplicationContextInitializer.class }) @RunWith(SpringRunner.class) public class SomeTestClass {


Prueba esto:

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestApplication.class, initializers = ConfigFileApplicationContextInitializer.class) public class SomeTestClass { ... }

EDITAR :

Para Spring Boot versión 1.5+, SpringApplicationConfiguration se eliminó a favor de SpringBootTest o el uso directo de SpringBootContextLoader .

Aún puede usar el parámetro de initializers con la anotación ContextConfiguration .