单测中如何mock用@Value注解注入的属性

简介: 单测中如何mock用@Value注解注入的属性

实际项目开发中,我们经常会使用@Value注解从配置文件中注入属性值,写单侧时,在不启动容器的条件下,如何对这种属性进行mock呢?对这种情况,Spring提供了一个很好的工具类ReflectionTestUtils来实现。 注入属性:

@Value("${prepaid.partner.id}")
private String merchantPartnerId;

对这个属性,在单测中可以这样mock:

ReflectionTestUtils.setField(targetObject, "merchantPartnerId", "123");

顾名思义,该工具类就是利用反射机制来实现的,底层源码如图所示:

public static Field findField(Class<?> clazz, String name, Class<?> type) {
    Assert.notNull(clazz, "Class must not be null");
    Assert.isTrue(name != null || type != null, "Either name or type of the field must be specified");
    Class<?> searchType = clazz;
    while (Object.class != searchType && searchType != null) {
        Field[] fields = getDeclaredFields(searchType);
        for (Field field : fields) {
            if ((name == null || name.equals(field.getName())) &&
                    (type == null || type.equals(field.getType()))) {
                return field;
            }
        }
        searchType = searchType.getSuperclass();
    }
    return null;
}



相关文章
|
3月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
|
3月前
|
IDE Java 测试技术
单元测试问题之Mockito 3.4mock静态方法如何解决
单元测试问题之Mockito 3.4mock静态方法如何解决
60 1
|
4月前
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
158 1
|
4月前
|
测试技术
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
41 1
|
4月前
|
测试技术
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
42 2
|
IDE Java 编译器
基于注解处理器开发自动生成getter和setter方法的插件
基于注解处理器开发自动生成getter和setter方法的插件
490 0
Mockito框架里面的@Mock注解原理
一文看懂@Mock注解的底层的底层原理:@Mock注解的底层其实就是用cglib
4038 0
|
Java 测试技术 Spring
单元测试service注解注入,会空指针异常
单元测试service注解注入,会空指针异常
681 0
|
Java API 开发者
JSR 269插件化注解处理实践(以模拟Lombok自动生成getter/setter为例)
JSR 269是jdk1.6中引入的,在此之前,开发者只能在运行期对注解进行处理,而JSR 269允许开发这在编译期对注解进行处理,以此可以完成很多java不支持的特性,甚至创造新的语法糖。大名鼎鼎的lombok就是基于JSR 269来实现的。1. 原理介绍javac的编译过程如下图所示:可以看到JSR 269,也就是注解处理在编译产生抽象语法树AST之后,在此处插入一些逻辑,并且可以对AST进行
682 0
JSR 269插件化注解处理实践(以模拟Lombok自动生成getter/setter为例)
|
测试技术
Junit单元测试类、反射、注解
Junit单元测试类、反射、注解
175 0