模拟int数据类型的@value注释

时间:2018-10-23 08:15:00

标签: java spring junit

@Component
public class MyHelper {     
    @Value("${max.retry.count:3}")
    private int maxRetryCount;

    @Value("${max.query.count:1000}")
    private int maxQueryCount;
}

我正在使用@value注释从属性文件中读取变量的值。 使用EasyMock编写junit时,出现

异常
"nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type [java.lang.String] to required type [int]; 
 nested exception is java.lang.NumberFormatException: For input string: "${max.retry.count:3}".

如果将数据类型更改为String,则可以正常工作。 有人帮助我如何模拟这个。

2 个答案:

答案 0 :(得分:0)

实际上有多种方法可以实现。

由Spring IoC容器管理的MyHelper

在这种情况下,您需要在测试规范上方添加其他注释,以创建ApplicationContext以便注入MyHelper bean。

@RunWith(SpringJUnit4ClassRunner.class)
public class MyHelperTest { ... }

您还将需要一个properties文件进行测试。如果您使用的是Spring Boot,则可以在application.properties文件夹的范围内简单地创建一个test/resources文件,并将这些属性的值放在此处,然后将其提取。

MyHelper手动实例化

这很容易。您只需为maxRetryCountmaxQueryCount创建一个构造函数或setter并以这种方式设置值。

public class MyHelperTest {
    private MyHelper myHelper = new MyHelper(5, 6);
}

在这种情况下,由于MyHelper不受Spring IoC容器的管理,注释将被忽略。

答案 1 :(得分:0)

尝试更改以下行

@Value("${max.query.count:1000}")

@Value("#{new int('${max.query.count:1000}')}")