1、默认行为

对于未指定mock的方法,spy默认会调用真实的方法,有返回值的返回真实的返回值,而mock默认不执行,有返回值的,默认返回null

2、调用方法

当我们对@Mock的类(@Mock private OrderDao dao;)进行模拟方法时,会像下面这样去做:

when(dao.getOrder()).thenReturn("returened by mock "); // 或者使用更为推荐的given方法

但如果想对@Spy的类(@Spy private PriceService ps;)进行模拟方法时,需要像下面一样去做:

doReturn("twotwo").when(ps).getPriceTwo();

原因:

使用@Mock生成的类,所有方法都不是真实的方法,而且返回值都是NULL。

使用@Spy生成的类,所有方法都是真实方法,返回值都是和真实方法一样的。

所以,你用when去设置模拟返回值时,它里面的方法(dao.getOrder())会先执行一次。

使用doReturn去设置的话,就不会产生上面的问题,因为有when来进行控制要模拟的方法,所以不会执行原来的方法。

3、代码覆盖率

@spy使用的真实的对象实例,调用的都是真实的方法,所以通过这种方式进行测试,在进行sonar覆盖率统计时统计出来是有覆盖率;
@mock出来的对象可能已经发生了变化,调用的方法都不是真实的,在进行sonar覆盖率统计时统计出来的Calculator类覆盖率为0.00%。

mock和spy的不同点相关推荐

  1. mock与spy的区别

    mock与spy的区别 1. mock 1.1 mock对象的方法不执行具体逻辑 1.2 使用方法打桩返回给定数据 1.3 mock如何执行具体逻辑? 2. spy 2.1 spy对象的方法执行具体逻 ...

  2. Java注解@Mock和@InjectMocks及@Mock和@Spy之间的区别

    Java注解@Mock和@InjectMocks及@Mock和@Spy之间的区别 1.@Mock和@InjectMocks的区别 @Mock为您需要的类创建一个模拟实现. @InjectMocks创建 ...

  3. Mock和Spy的区别 打桩的区别

    mock与spy @Mock 1.对该对象所有非私有方法的调用都没有调用真实方法 2.对该对象私有方法的调用无法进行模拟,会调用真实方法 @Spy 对该对象所有方法的调用都直接调用真实方法 一句话来说 ...

  4. @Mock,@Spy和@InjectMock

    1.@Mock:mock对象,对函数的调用均使用mock,不会调用真实方法,使用: Mockito.when(testService.getById(Mockito.any())).thenRetur ...

  5. android静态方法如何测试,android – 如何使用mock()和spy()测试静态方法

    通常情况下,如果你最终使用PowerMock,这是一个很好的迹象,表明你最有可能是错误的方式. 如果不是直接引用毕加索,而是创建一个组件,它的职责是加载图像,让我们说类ImageLoader.这会给你 ...

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

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

  7. 单元测试框架 Mockito 注解 – @Mock, @Spy, @Captor, @InjectMocks

    转载翻译自 https://howtodoinjava.com/mockito/mockito-annotations/ 这篇 mockito 的教程文章能够帮助你了解更多 mockito 注解,比如 ...

  8. java 单元测试inject_Mockito中@Mock与@InjectMock

    Mockito是java单元测试中,最常用的mck工具之一,提供了诸多打桩方法和注解.其中有两个比较常用的注解,@Mock和@InjectMock,名字和在代码中使用 的位置都很像,对于初学者,很容易 ...

  9. 单元测试源码分析之一创建mock对象

    之前已经介绍过Mockito和PowerMock的常见用法,PowerMock其实就是在Mockito的基础上使用了字节码技术使得其可以对静态方法,私有方法等进行插桩. 现在就先来看看Mockito是 ...

  10. Mock进行单元测试

    文章目录 @InjectMocks 使用 1.Maven 2.创建Mock对象 Spy 我认为比较好的一种方式: Mockito 使用 Mock 对象的行为验证 验证调用次数 Spy 对象验证 中文文 ...

最新文章

  1. 跳转控制语句 break || continue || goto
  2. vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
  3. 你必须失败---来自迈克尔·乔丹的6条教训
  4. 【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)
  5. php5中this_self_parent关键字用法讲解
  6. Beetl学习(一)
  7. 忘了微信密码怎么办_微信支付密码怎么改?微信支付密码忘了怎么办?详细教程来了!...
  8. VMware Workstation虚拟机安装
  9. 除了待办清单,用 Things 还能做什么?
  10. 【Unity3D】2D动画
  11. 全国大学生数学建模竞赛论文格式规范
  12. c语言经典程序100例加注释,C语言经典100例
  13. Docker运维笔记-Docker端口映射
  14. oracle 查询日期转为字符串,SQL Server和Oracle日期与字符串之间的转换
  15. android打开系统文件怎么打开方式,Android调用系统应用打开任意文件
  16. Fluent中floating point exception的问题原因及处理方法
  17. 【C语言】编程初学者入门训练(7)
  18. linux中的du命令和df命令和fdisk命令
  19. 我用 pyhton 做了款可开淘宝店赚钱的工具
  20. 智慧汽车服务2.0.6 汽车美容 保养 维修 洗车一站式平台源码

热门文章

  1. 实验二 (一) 大小写英文字母表
  2. 词根词缀 按字母划分
  3. 数据中心服务器机柜电气参数,数据中心服务器机柜选择指南
  4. 文本数据挖掘----初识数据挖掘
  5. 自然辩证法对计算机科学技术的应用,自然辩证法在计算机科学技术中的应用
  6. 为什么要用代理服务器?
  7. 初识DNA甲基化芯片
  8. 积分专题笔记-曲线面积分三大公式
  9. 破解飞速!《星际2》可与电脑进行AI对战
  10. 程序员公司任职软件开发著作权该归谁呢