单测中如何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 方法的作用如何解决
|
4月前
|
Java Spring 容器
重写并自定义依赖的原生的Bean方法
重写并自定义依赖的原生的Bean方法
29 5
|
4月前
|
测试技术
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
44 1
|
4月前
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
205 1
|
4月前
|
测试技术
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
57 2
|
6月前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
XML Java 数据格式
案例03 基于xml配置的setter方法注入案例
通过setter方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现StudentService调用StudentDao的saveStudent操作。
91 0
Mockito框架里面的@Mock注解原理
一文看懂@Mock注解的底层的底层原理:@Mock注解的底层其实就是用cglib
4052 0
|
Java Spring
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
446 0
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
|
JSON API PHP
【源码解读】TP框架参数注入,参数绑定
核心是:使用反射类,拿到需要执行的类、方法属性,然后分析传参的属性,在post、get、类属性等等参数中,按不同优先级搜寻符合注入条件的参数。 最终使用执行,并且提供组装正确的参数数组。 php的反射类,可以分析目标类的各种属性 方法列表、参数、私有共有属性、方法的类型等等 以下提供一个简单的列表
276 0