美文网首页
spring boot单元测试mock代理接口--反射机制

spring boot单元测试mock代理接口--反射机制

作者: wuli见见 | 来源:发表于2019-12-02 16:53 被阅读0次

    场景:

    在类中注入DAO接口,如Mapper,实际是一个代理接口,单元测试的时候模拟SQL语句返回结果。

    上一篇文章使用Setter方法改变代理接口为Mock类

    但是会对代码有所改变,侵入性太强,不合理,所以此次使用反射机制来改变类的属性

    /**

    * 改变目标类的属性

    * @param candidate    目标类

    * @param fieldName    属性名

    * @param fieldObject  属性类

    */

    public void changeTargetField(Object candidate, String fieldName, Object fieldObject) {

        if (candidate instanceof Advised) {

            TargetSource targetSource =((Advised) candidate).getTargetSource();

            if (targetSource instanceof SingletonTargetSource) {

                Object target = ((SingletonTargetSource) targetSource).getTarget();

                try {

                    Field field = candidate.getClass().getSuperclass().getDeclaredField(fieldName);

                    field.setAccessible(true);

                    field.set(target, fieldObject);

                    return;

                } catch (NoSuchFieldException | IllegalAccessException e) {

                    throw new RuntimeException("代理类设置属性失败");

                }

            }

            throw new RuntimeException("未找到代理类");

          } else {

              try {

                    Field field = candidate.getClass().getDeclaredField(fieldName);

                    field.setAccessible(true);

                    field.set(candidate, fieldObject);

              } catch (NoSuchFieldException | IllegalAccessException e) {

                    throw new RuntimeException("目标类设置属性失败");

              }

        }

    }

    相关文章

      网友评论

          本文标题:spring boot单元测试mock代理接口--反射机制

          本文链接:https://www.haomeiwen.com/subject/qisfgctx.html