mock和spy的不同点
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的不同点相关推荐
- mock与spy的区别
mock与spy的区别 1. mock 1.1 mock对象的方法不执行具体逻辑 1.2 使用方法打桩返回给定数据 1.3 mock如何执行具体逻辑? 2. spy 2.1 spy对象的方法执行具体逻 ...
- Java注解@Mock和@InjectMocks及@Mock和@Spy之间的区别
Java注解@Mock和@InjectMocks及@Mock和@Spy之间的区别 1.@Mock和@InjectMocks的区别 @Mock为您需要的类创建一个模拟实现. @InjectMocks创建 ...
- Mock和Spy的区别 打桩的区别
mock与spy @Mock 1.对该对象所有非私有方法的调用都没有调用真实方法 2.对该对象私有方法的调用无法进行模拟,会调用真实方法 @Spy 对该对象所有方法的调用都直接调用真实方法 一句话来说 ...
- @Mock,@Spy和@InjectMock
1.@Mock:mock对象,对函数的调用均使用mock,不会调用真实方法,使用: Mockito.when(testService.getById(Mockito.any())).thenRetur ...
- android静态方法如何测试,android – 如何使用mock()和spy()测试静态方法
通常情况下,如果你最终使用PowerMock,这是一个很好的迹象,表明你最有可能是错误的方式. 如果不是直接引用毕加索,而是创建一个组件,它的职责是加载图像,让我们说类ImageLoader.这会给你 ...
- Mockito的使用(二)——@InjectMocks、@Spy、@Mock
项目中,有些函数需要处理某个服务的返回结果,而在对函数单元测试的时候,又不能启动那些服务,这里就可以利用Mockito工具,其中有如下三种注解: @InjectMocks:创建一个实例,简单的说是这个 ...
- 单元测试框架 Mockito 注解 – @Mock, @Spy, @Captor, @InjectMocks
转载翻译自 https://howtodoinjava.com/mockito/mockito-annotations/ 这篇 mockito 的教程文章能够帮助你了解更多 mockito 注解,比如 ...
- java 单元测试inject_Mockito中@Mock与@InjectMock
Mockito是java单元测试中,最常用的mck工具之一,提供了诸多打桩方法和注解.其中有两个比较常用的注解,@Mock和@InjectMock,名字和在代码中使用 的位置都很像,对于初学者,很容易 ...
- 单元测试源码分析之一创建mock对象
之前已经介绍过Mockito和PowerMock的常见用法,PowerMock其实就是在Mockito的基础上使用了字节码技术使得其可以对静态方法,私有方法等进行插桩. 现在就先来看看Mockito是 ...
- Mock进行单元测试
文章目录 @InjectMocks 使用 1.Maven 2.创建Mock对象 Spy 我认为比较好的一种方式: Mockito 使用 Mock 对象的行为验证 验证调用次数 Spy 对象验证 中文文 ...
最新文章
- 跳转控制语句 break || continue || goto
- vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
- 你必须失败---来自迈克尔·乔丹的6条教训
- 【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)
- php5中this_self_parent关键字用法讲解
- Beetl学习(一)
- 忘了微信密码怎么办_微信支付密码怎么改?微信支付密码忘了怎么办?详细教程来了!...
- VMware Workstation虚拟机安装
- 除了待办清单,用 Things 还能做什么?
- 【Unity3D】2D动画
- 全国大学生数学建模竞赛论文格式规范
- c语言经典程序100例加注释,C语言经典100例
- Docker运维笔记-Docker端口映射
- oracle 查询日期转为字符串,SQL Server和Oracle日期与字符串之间的转换
- android打开系统文件怎么打开方式,Android调用系统应用打开任意文件
- Fluent中floating point exception的问题原因及处理方法
- 【C语言】编程初学者入门训练(7)
- linux中的du命令和df命令和fdisk命令
- 我用 pyhton 做了款可开淘宝店赚钱的工具
- 智慧汽车服务2.0.6 汽车美容 保养 维修 洗车一站式平台源码