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

介绍之前,首先要明确一点:@Mock和@InjectMock这两个注解除了名字和使用方式比较像之外,是在功能上无任何可类比性的完全不同的东西。

@Mock:

在Mockito中用于创建mock对象,使用方法如下:

@Mock

private ClassName mockedObject;

上面代码创建了一个名为mockedObject,类型为ClassName的mock对象,该对象所有的方法被置空,根据测试代码逻辑的需要使用

@InjectMock:

这是一个注入mock对象的操作,参考如下代码:

@Mock

private ClassName mockedObject;

@InjectMock

private TestedClass TestedObj = new TestedClass();

这段代码中,@InjectMock下面声明了一个待测试的对象,若该对象有类型为ClassName的成员变量,@Mock定义的mock对象将会被注入到这个待测试的对象中,既TestedObj的类型为ClassName的成员被直接赋值为mockedObject。(熟悉依赖注入的同学应该很容易理解)

补充几点:

1. @Mock创建的是全部mock的对象,既在对具体的方法打桩之前,mock对象的所有属性和方法全被置空(0或者null);与之对应的是@Spy这个注解,@Spy可以创建部分mock的对象,部分mock对象的所有成员方法都会按照原方法的逻辑执行,直到被打桩返回某个具体的值。@Mock和@Spy才是两个具有可比性的概念。

2. Mokcito的mock()方法功能与@Mock相同,只是使用方式和场景不同。同样的,@Spy也对应一个spy()方法。

3. @Mock和@Spy注解的对象,均可被@InjectMock注入到待处理的对象中。

java 单元测试inject_Mockito中@Mock与@InjectMock相关推荐

  1. Mockito中@Mock与@InjectMock

    Mockito中@Mock与@InjectMock Mockito是java单元测试中,最常用的mock工具之一,提供了诸多打桩方法和注解.其中有两个比较常用的注解,@Mock和@InjectMock ...

  2. Java单元测试实践-06.Mock后Stub静态方法

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Mock后 ...

  3. Java单元测试实践-11.Mock后Stub Spring的@Component组件

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Sprin ...

  4. 使用Mockito进行Java单元测试

    Google在3月份推出了一个关于Android MVP架构的官方Sample,除MVP架构本身之外,在这个Sample中配备了完善的单元测试用例,这对学习如何在Android中进行单元测试具有极高的 ...

  5. jmockit教程_java单元测试使用jMockit mock私有方法,jmockitmock,jMockit简直是万能

    java单元测试使用jMockit mock私有方法,jmockitmock,jMockit简直是万能 jMockit简直是万能的,私有方法也可以方便的做Mock.如下是mock私有方法的代码: 要测 ...

  6. Mock和Java单元测试中的Mock框架Mockito介绍

    什么是Mock? 在面向对象程序设计中,模拟对象(英语:mock object,也译作模仿对象)是以可控的方式模拟真实对象行为的假的对象.程序员通常创造模拟对象(mock object)来测试其他对象 ...

  7. Java单元测试(Junit+Mock+代码覆盖率)

    单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进 ...

  8. 使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率

    本文将介绍两种开发实践,用于提高 Java 单元测试中的代码覆盖率.代码覆盖率 = (被测代码 / 代码总数)* 100%.提高被测代码数量或降低代码总数,均可达到提高代码覆盖率的效果.在本文中,您将 ...

  9. 使用 @MockBean 和 @SpyBean 解决 SpringBoot 单元测试中 Mock 类装配的问题

    最近在做某个项目的时候一直使用 @MockBean 来解决单元测试中 Mock 类装配到被测试类的问题.这篇文章主要介绍了 @MockBean 的使用例子以及不使用 @MockBean 而使用@Spy ...

最新文章

  1. MYSQL 类ORACLE序列实现遇到的问题
  2. ios开发学习笔记--调用相册或相机(UIImagePickerController)
  3. python字符串截取及Html解析
  4. python 元组使用_Python3
  5. C++对象确定性解析单例模式
  6. Swift 中的设计模式 #3 外观模式与适配器模式
  7. wamp php启动不成功,wamp的mysql 启动失败解决
  8. java注意的一些细节问题
  9. 11月 北京 | 高性能之GPU CUDA 3天密集式进阶课程
  10. Angularjs总结(一)表单验证
  11. Python中的音频和数字信号处理(DSP)
  12. java jar 启动脚本
  13. Apache搭建web网站服务器
  14. html嵌入百度地图无法显示
  15. APP上架市场隐私政策被拒(关于未经用户同意收集用户信息)
  16. python将两列内容合并_在pandas/python中,将两列合并为同一数据帧中的一列
  17. H3C运维审计系统 故障处理手册(笔记)
  18. 2021物联网国赛zigbee点对点通讯——G卷
  19. 计算机一级考试PPT部分几分,计算机一级考试PPT幻灯片和最后一题(就是自己输网址)各有多少分啊...
  20. 人终有一老,大龄程序员该何去何从?从20岁开始卷?

热门文章

  1. 收藏 | Redis 使用 10 个小技巧
  2. 8月最新阿里技术栈架构资料
  3. 何时(不)使用Java抽象类
  4. Spring Security 入门(五):在 Spring-Boot中的应用
  5. 【mysql】linux安装mysql
  6. Windows下Erlang开发环境搭建
  7. pyotrch nn.Conv2d中groups参数的理解
  8. ffmpeg 编译安装 ubuntu18.04 4.1
  9. Ubuntu tensorflow自定义GPU版本op节点
  10. python 数组队列