test java spring junit junit4 spring-3

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.