Mockito的使用(二)——@InjectMocks、@Spy、@Mock

2023-11-20

项目中,有些函数需要处理某个服务的返回结果,而在对函数单元测试的时候,又不能启动那些服务,这里就可以利用Mockito工具,其中有如下三种注解:
@InjectMocks:创建一个实例,简单的说是这个Mock可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。

@Mock:对函数的调用均执行mock(即虚假函数),不执行真正部分。

@Spy:对函数的调用均执行真正部分。

Mockito中的Mock和Spy都可用于拦截那些尚未实现或不期望被真实调用的对象和方法,并为其设置自定义行为。二者的区别在于Mock不真实调用,Spy会真实调用。

具体的工作中会遇到的具体案例:
问题1:
实例对象的注入对象和注入对象含有相同的属性。举例说明:实例对象ClassA中含有注入对象ClassB、ClassC,实例对象ClassB中也含有ClassC。
问题2:
实例对象中含有太多的注入类,并且大部分的代码走真实调用方式,只想要数据库操作的部分代码走Mock调用的方式。

对于上面两个问题其实要解决的根本问题就是:如何解决Mock注入冲突,同时注入两个甚至多个对象中?
首先介绍一下Mockito给我们提供的一些工具类:通过AopTestUtils对切面对象进行mock
上面的博文中提供给了我们很好的一个思路,我们可以通过切面方式把每一个Mock对象都放到实例对象中。
以下是我的解决方案;
首先:将实例对象注入,同时使用Autowired和@InjectMocks注解
对象注入
再者,将Mock对象通过反射写入到实例对象中
反射注入mock对象
最后,规定好返回参数就可以进行流程的测试了。
开始测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockito的使用(二)——@InjectMocks、@Spy、@Mock 的相关文章

随机推荐

  • nvidia-smi no devices were found

    报错 找不到设备 输入 lspci grep i vga 发现显卡其实还在 用NVIDIA Linux x86 64 xxx xxx run重装了一下显卡驱动 发现还是不行 最后用了另一种安装方式 ubuntu drivers device
  • CDN加速

    CDN加速 CDN Content Delivery Network 内容分发网络 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节 使内容传输的更快更稳定 在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网
  • layui入门

    1 什么是layui layui 谐音 类 UI 是一套开源的 Web UI 解决方案 采用自身经典的模块化规范 并遵循原生 HTML CSS JS 的开发方式 极易上手 拿来即用 其风格简约轻盈 而组件优雅丰盈 从源代码到使用方法的每一处
  • [从零开始学习FPGA编程-24]:进阶篇 - 基本组合电路-编码器与译码器(Verilog语言)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 125247358 目录 前言 Veri
  • C++引用、内联函数、auto关键字解析

    目录 引用 内联函数 auto关键字 引用 引用变量是一个别名 也就是说 它是某个已存在变量的另一个名字 一旦把引用初始化为某个变量 就可以使用该引用名称或变量名称来指向变量 这里的变量a 共有三个引用 a b d e是共用同一块空间的 也
  • 删除大量Oracle数据方法总结

    Oracle中删除超过50w条记录的数据 如果直接使用delete 效率就严重受到了影响 那么首先我们需要了解对于这个表的数据 我们到底是全部删除 还是部分删除 这里有三个关键字我们需要注意 truncate delete drop 他们之
  • nvdiffrecmc在Windows上的配置及使用

    nvdiffrecmc是NVIDIA研究院开源的项目 源代码地址 https github com NVlabs nvdiffrecmc 论文为 Shape Light and Material Decomposition from Ima
  • PL/SQL中从数据表对变量赋值select into异常

    概述 pl sql从数据表中向变量赋值 使用select into 子句 会带动来一些问题 如果查询没有记录时 会抛出no data found异常 如果有多条记录时 会抛出too many rows异常 CREATE OR REPLACE
  • selenium js 删除网页代码

    js var child document getElementsByTagName link child 115 parentNode removeChild child 115 js var child document getElem
  • leetcode shell

    leetcode 195 第十行 cat file txt head n 10 tail n 1 cat file txt tail n 10 head n 1 第一种是先取出前10行 然后取出最后一行 但是不足10行 也可以取出最后一行
  • 2023年智能材料与表面国际会议(ICoSMS 2023)

    会议日期 2023 3 24 至 2023 3 26 会议简介 2023年智能材料与表面国际会议 ICoSMS 2023 重要信息 会议网址 www icosms org 会议时间 2023年3月24 26日 召开地点 中国上海 截稿时间
  • 深聊测开领域之:虫剂悖论

    测试免疫 1 初识虫剂悖论 2 应对虫剂悖论 2 1 更新测试策略 2 2 更新测试用例 1 初识虫剂悖论 提到 虫剂悖论 pesticide paradox 我相信很多人都没听说的 除非是生物学专业的同学或者砖家 虫剂悖论描述的是重复使用
  • Log4j2突发重大漏洞之解决方案

    漏洞描述 Apache Log4j2是一款优秀的Java日志框架 与Logback平分秋色 大量主流的开源框架采用了Log4j2 像Apache Struts2 Apache Solr Apache Druid Apache Flink等均
  • wget: 无法解析主机地址

    root hadoop102 wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 6 repo 2018 10 09 14 22 53 ht
  • 云服务器车牌识别系统,人脸识别/车牌识别系统安防视频云服务EasyCVR支持大华SDK语音对讲...

    TSINGSEE青犀视频平台EasyCVR内 已经能够通过国标GB28181协议实现语音对讲功能 在大华SDK的研发方面 也开发了该功能 本文和大家分享下 EasyCVR语音对讲主要用于实现本地平台与前端设备所处环境间的语音交互 解决本地平
  • SQLite的shell简单使用

    下载最新的shell for windows http www sqlite org sqlite shell win32 x86 3070800 zip 解压后得到 sqlite3 exe1 1 创建数据库 C sqlite3 gt sq
  • 使用moment.js推算当前时间的前多少天

    在项目中遇到一个问题 推算当前时间的前7天 30天 当然使用js一点点推算可以的 但是可以使用moment js 简单就可以推算出来 获取当前时间 moment format YYYY MM DD HH mm ss 当前时间的前7天 mom
  • QLineEdit和QPushButton实现了输入用户名、密码并验证的功能

    使用QLineEdit和QPushButton实现了输入用户名 密码并验证的功能 该程序使用正则表达式限制了用户名和密码只能包含数字 字母和下划线 且长度在4到16个字符之间 如果输入的用户名和密码符合要求 则弹出一个消息框显示 登录成功
  • 【安装篇】- 基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案

    作者 yanwei 来源 墨天轮 https www modb pro db 95684 大家好 我是 JiekeXu 很高兴又和大家见面了 今天和大家一起来看看 Linux7 9 安装 Oracle19c RAC 详细配置方案 欢迎点击上
  • Mockito的使用(二)——@InjectMocks、@Spy、@Mock

    项目中 有些函数需要处理某个服务的返回结果 而在对函数单元测试的时候 又不能启动那些服务 这里就可以利用Mockito工具 其中有如下三种注解 InjectMocks 创建一个实例 简单的说是这个Mock可以调用真实代码的方法 其余用 Mo