java - 解析 JUnit 测试中的 Spring @Value 表达式

标签 java spring junit junit4 spring-3

这是一个 Spring bean 的片段:

@Component
public class Bean {

    @Value("${bean.timeout:60}")
    private Integer timeout;

    // ...
}

现在我想用 JUnit 测试来测试这个 bean。因此,我使用 SpringJUnit4ClassRunnerContextConfiguration注释。

@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/

相关文章:

java - Junit 测试并发

java - 克隆 textview 以将其附加到 ViewGroup

java - Executors 类中的 newSingleThreadExecutor() 方法

java - Maven 找不到测试方法

java - 如何测试 Java getter 方法

java - 具有多个模式/数据库的 spring-boot 应用程序中的实体管理器错误

java - 点游戏失败,无法正确识别和绘制图像周围的点

java - 如何从变量设置数据库登录信息?

java - 如何指定多个 Spring Data Solr Facet 字段?

java - SpringBoot @WebMvcTest, Autowiring RestTemplateBuilder