这是一个 Spring bean 的片段:
@Component
public class Bean {
@Value("${bean.timeout:60}")
private Integer timeout;
// ...
}
现在我想用 JUnit 测试来测试这个 bean。因此,我使用 SpringJUnit4ClassRunner和 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();
}
}
}
不幸的是,SpringJUnit4ClassRunner 无法解析 @Value
表达式,即使提供了默认值(抛出 NumberFormatException)。似乎运行者甚至无法解析表达式。
我的测试中是否缺少某些内容?
最佳答案
您的测试 @Configuration
类缺少 PropertyPlaceholderConfigurer
的实例,这就是 Spring 不知道如何解析这些表达式的原因;将如下 bean 添加到您的 SpringConfiguration
类
@org.springframework.context.annotation.Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setIgnoreResourceNotFound(true);
return ppc;
}
并将其移至单独的类并使用
@ContextConfiguration(classes=SpringConfiguration.class)
在运行测试时更具体。
关于java - 解析 JUnit 测试中的 Spring @Value 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20879608/