java - test - spring inject properties
Resolver la expresión Spring @Value en las pruebas JUnit (1)
Aquí hay un fragmento de un Spring Bean:
@Component
public class Bean {
@Value("${bean.timeout:60}")
private Integer timeout;
// ...
}
Ahora quiero probar este bean con una prueba JUnit. Por lo tanto, estoy usando SpringJUnit4ClassRunner y la anotación ContextConfiguration .
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BeanTest {
@Autowired
private Bean bean;
// tests ...
@Configuration
public static class SpringConfiguration {
@Bean
public Bean bean() {
return new Bean();
}
}
}
Desafortunadamente, SpringJUnit4ClassRunner no puede resolver la expresión @Value
, aunque se proporcione un valor predeterminado (se emite NumberFormatException ). Parece que el corredor ni siquiera es capaz de analizar la expresión.
¿Algo falta en mi prueba?
A su clase @Configuration
prueba le falta una instancia de PropertyPlaceholderConfigurer
y es por eso que Spring no sabe cómo resolver esas expresiones; agregue un bean como el siguiente a su clase SpringConfiguration
@org.springframework.context.annotation.Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setIgnoreResourceNotFound(true);
return ppc;
}
y moverlo a una clase separada y usar
@ContextConfiguration(classes=SpringConfiguration.class)
para ser más específico al ejecutar su prueba.