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
.