ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – mockito中的spring值注入

2019-10-04 10:11:13  阅读:161  来源: 互联网

标签:java properties spring spring-mvc mockito


我正在尝试为以下方法编写测试类

public class CustomServiceImpl implements CustomService {
    @Value("#{myProp['custom.url']}")
    private String url;
    @Autowire
    private DataService dataService;

我在类中的一个方法中使用了注入的url值.
为了测试这个,我写了一个junit类

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext-test.xml" })
public CustomServiceTest{
    private CustomService customService;
    @Mock
    private DataService dataService;
    @Before
    public void setup() {
        customService = new CustomServiceImpl();
        Setter.set(customService, "dataService", dataService);
    }    
    ...
}

public class Setter {
    public static void set(Object obj, String fieldName, Object value) throws Exception {
        Field field = obj.getClass().getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(obj, value);
    }
}

在applicationContext-test.xml中我正在使用加载属性文件

    <util:properties id="myProp" location="myProp.properties"/>

但是在运行测试时,不会在CustomService中加载url值.
我想知道是否有办法完成这项工作.

谢谢

解决方法:

您可以自动装入mutator(setter),而不仅仅是注释私有字段.然后您也可以使用测试类中的setter.不需要公开它,包私有会做,因为Spring仍然可以访问它,但是否则只有你的测试可以进入那里(或同一包中的其他代码).

@Value("#{myProp['custom.url']}")
String setUrl( final String url ) {
    this.url  = url;
}

我不喜欢自动装配(与我的代码库相比)仅仅用于测试,但是从测试中改变测试类的替代方案简直是不圣洁的.

标签:java,properties,spring,spring-mvc,mockito
来源: https://codeday.me/bug/20191004/1852739.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有