Mock代理对象失效问题分析

2023-10-27

Mockito 简介

Mockito是一种常用的java单测框架,主要功能就是用来模拟接口的实现,对于测试环境无法执行的方法可以通过mock来执行我们定义好的逻辑。
通常代码写法如下

public class AimServiceTest {

    // 将mock对象注入到目标对象中
    @Resource
    @InjectMocks
    private AimService aimService;

    // 生成mock对象
    @Mock
    private NameService nameService;

    @Before
    public void before(){
        // 开启mock
        MockitoAnnotations.openMocks(this);
        // 当执行指定方法时返回指定内容
        when(nameService.getName()).thenReturn("ling");
    }

    @Test
    public void test(){
        // 调用mock方法
        aimService.printName();
    }
}

@Service
public class AimService{

    @Resource
    private NameService nameService;

    public void printName(){
        System.out.println("hello " + nameService.getName());
    }
}

@Service
public class NameService {

    public String getName(){
        return "tiang";
    }
}

输出结果如下。代码执行到mock对象的方法时返回结果会被替换成我们指定的结果。

hello ling

但是在实际开发过程中,我们经常会遇到mock实效的问题,比如当AimService这个类被代理之后,mock就会失效

@Aspect
@Component
public class AimServiceAspect {

    @Pointcut("execution(* com.alibaba.AimService.printName())")
    public void print(){}

    @Before("print()")
    public void beforePrint(){
        System.out.println("before print");
    }
}

此时输出结果则为:

before print
hello tiang

mock的结果并没有生效。为了搞清楚这个问题,我们首先要搞清楚Mockito究竟是如何将生成的mock对象注入到目标对象的指定字段中的,以及生成的代理类究竟是什么样。

在开始之前我们可以先看一下下面这段代码的输出是什么

@Service
public class AimService{

    @Resource
    private NameService nameService;

    public void printName(){
        System.out.println("AimService hello " + nameService.getName());
    }
}
@Service
public class AimServiceWithSet {
    @Resource
    private NameService nameService;

    public void setNameService(NameService nameService){
        this.nameService = nameService;
    }

    public void printName(){
        System.out.println("AimServiceWithSet hello " + nameService.getName());
    }
}
public interface AbstractService {
    void printName();
}
@Service("aimServiceWithInterface")
public class AimServiceWithInterface implements AbstractService{
    @Resource
    private NameSe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mock代理对象失效问题分析 的相关文章

  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • Satck与Queue要点

    Satck Stack定义 核心接口 stack源码 栈的实现 静态数组实现栈 动态数组实现栈 链表实现栈 queue queue与stack queue的实现 Satck Stack定义 stack的特点是先进先出 与queue正好相反
  • 一个局域网中,不同网段的服务器能通信吗?

    文章目录 起步 环境说明 B ping A A ping B 子网的误判 感谢 起步 在一个局域网中存在两台服务器 A B A IP 192 168 211 110 NETMASK 255 255 255 0 B IP 192 168 21
  • QT 新手小白USBCAN 学习

    一 介绍CAN总线 CAN总线介绍 二 USBCAN总线 2 1 产品介绍 USBCAN 转换器模块实现了将 CAN 总线接口与 USB 接口进行相互转换 可以 简单方便的通过电脑监视 CAN 总线网络 同时可以实现工业现场数据稳定的双 向
  • php xml数据类型,PHP实现XML与数据格式进行转换类实例

    xml2array will convert the given XML text to an array in the XML structure Link http www bin co com php scripts xml2arra
  • Java架构师成长升级历程

    目录 前言 一 学习途径整理 目录 前言 一 学习途径整理 二 如何高效的学习 三 书籍推荐 MQ相关 云原生相关 Redis相关 架构相关 Mybaits 四 优秀博文整理 五 极客时间 六 硬核公众号推荐 七 宝藏学习网站 八 架构设计
  • just4fun:神奇的代码生成好看的图片

    原文链接 用三段 140 字符以内的代码生成一张 1024 1024 的图片 在VS2015下 试了一下生成下图的代码 生成ppm格式图片的代码如下 include
  • 论文笔记:TIMESNET: TEMPORAL 2D-VARIATION MODELINGFOR GENERAL TIME SERIES ANALYSIS

    ICLR 2023 1 intro 时间序列一般是连续记录的 每个时刻只会记录一些标量 之前的很多工作着眼于时间维度的变化 以捕捉时间依赖关系 gt 可以反映出 提取出时间序列的很多内在特征 比如连续性 趋势 周期性等 但是现实时间序列数据
  • 服务器运行tomcat报错误java.security.UnrecoverableKeyException: Cannot recover key

    问题 项目部署在阿里云服务器上 一直都是正常运行 因业务需要重启服务器 之后就启动tomcat 然后就发现启动不了了 报错 java security UnrecoverableKeyException Cannot recover key
  • MVS、SFM的区别和联系

    文章目录 一 双目相机重建步骤 二 SFM重建步骤 三 MVS重建步骤 四 SFM 和MVS 各自的目的 五 传统MVS和深度学习MVS对比 一 双目三维重建 binocular stereo 输入左右两张图片 二 SFM Structur
  • 法律法规

    法律体系 我国法律体系基本框架 由宪法和宪法相关法 民法商法 行政法 经济法 社会法 刑法 诉讼及非诉讼程序法构成 法的形式 法的形式的4个含义 1 法律规范的创制机关的性质及级别 2 法律规范的外部表现形式 3 法律规范的效力等级 4 法
  • 平时都用Python绘制二维图,如果用来绘制三维图会有什么效果?

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 通常我们用 Python 绘制的都是二维平面图 但有时也需要绘制三维场景图 比如像下面这样的 这些图怎么做出来呢 今
  • 备赛电赛学习STM32篇(九):ADC

    目录 一 ADC的简介 二 逐次逼近型ADC 2 1 逐次逼近型ADC框图 2 2 STM32 ADC内部介绍 2 2 1 STM32ADC的通道以及存储数据的寄存器 2 2 2 触发方式 2 2 3 STM32ADC时钟部分 2 2 4
  • 机器学习——聚类——距离聚类法——K-means

    目录 理论部分 1 1 聚类概念 1 1 1 定义 1 1 2 与分类的区别 1 2 相似度测量 1 2 1 欧式距离 1 2 2 马氏距离 1 3 聚类准则 1 3 1 试探方法 1 3 2 聚类准则法 1 4 常见聚类方法 1 5 K均
  • 判断(if)语句

    先说一下if语句的应用场景 生活中我们会有这样那样的如果 发工资为例 我们将它转化成代码 if 今天发工资 先还信用卡的钱 四个空格或tap键 不能混用 if 有剩余 就要买买买 else 难受ing else 期待下个月 正是有了判断 我
  • C#使用protobuf简述

    编译依赖项 首先 创建一个C 4 5以上project 因为最新的protobuf依赖于C 5 0的语言特性 然后 我们通过nuget 为项目添加对protobuf的引用 搜索protobuf就可以开始安装了 安装完成后 可以编译一次工程
  • JVM运行原理及优化之 jstat -gc

    我们写好的代码 是要通过JVM才能运行的 JVM 想要执行一个类 首先要加载类 在加载类之前 需要先编译成字节码class 文件 然后就执行类的加载过程 JVM 加载类的话 需要类加载器 类加载器是分层级的 遵循双亲委派机制 最上层是Boo
  • 服务端与移动端交互信任的锚点---维护授信证书与私钥

    HTTPS 分为 HTTP SSL 安全套接字层 后面SSL3 0之后被重命名为TLS1 0 其实就是SSL3 0的进化版本 TLS1 0 Transport Layer Security 安全传输层协议 可以说TLS就是SSL的新版本3
  • css中只使用vue的变量

    参考 https blog csdn net FellAsleep article details 130617163 1 必须作用在用一个div上 2 变量必须有双横杠 span class bb 11 span data return
  • 低代码开发平台能开发什么类型的系统和软件?

    低代码开发平台能开发什么类型的系统和软件 1 数据分析和报告系统 使用低代码平台 企业可以创建数据看板 集成不同数据源 自动提取 分析和可视化数据 这种系统适用于监控业务指标 分析趋势 并为决策提供数据支持 2 信息管理系统 低代码平台能够
  • Mock代理对象失效问题分析

    Mockito 简介 Mockito是一种常用的java单测框架 主要功能就是用来模拟接口的实现 对于测试环境无法执行的方法可以通过mock来执行我们定义好的逻辑 通常代码写法如下 public class AimServiceTest 将