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注入到待处理的对象中。

Mockito中@Mock与@InjectMock的更多相关文章

  1. 单元测试Mockito中的Mock和Spy

    转载:https://blog.csdn.net/qq_30141957/article/details/81273829 项目中,有些函数需要处理某个服务的返回结果,而在对函数单元测试的时候,又不能 ...

  2. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

  3. [Unit Testing] Using Mockito Annotations - @Mock, @InjectMocks, @RunWith

    Previously we have seen how to do Unit testing with Mockito; import org.junit.Test; import static or ...

  4. spring /spring boot中mock

    1 Mockito简介 1.1 Mockito是什么   Mockito是一个简单的流行的Mock框架.它允许你创建和配置mock对象.使用Mockito可以明显的简化对外部依赖的测试类的开发.一般使 ...

  5. 在SpringTest中将Mockito的mock对象通过spring注入使用

    转载:https://blog.csdn.net/m0_38043362/article/details/80111957 1. 原理介绍 通过BeanFactoryPostProcessor向Bea ...

  6. Mockito 中文文档 ( 2.0.26 beta )

    Mockito 中文文档 ( 2.0.26 beta ) 由于缺乏校对,难免有谬误之处,如果发现任何语句不通顺.翻译错误,都可以在github中的项目提出issue.谢谢~ Mockito框架官方地址 ...

  7. Mockito不能mock final类的解决办法

    Mockito是很常用的测试工具,使用过程中可能会遇到下面的问题: Mockito cannot mock/spy because : - final class 问题重现: 引入该依赖到项目的mav ...

  8. python中mock的使用

    什么是mock? mock在翻译过来有模拟的意思.这里要介绍的mock是辅助单元测试的一个模块.它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言. 在Python2.x 中 mock ...

  9. Mockito 如何 mock 返回值为 void 的方法

    转载:https://unmi.cc/mockito-how-to-mock-void-method/#more-7748 最初接触 Mockito 还思考并尝试过如何用它来 mock 返回值为 vo ...

随机推荐

  1. kafka概述

    kafka概述 Apache Kafka是一个开源 消息 系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目. Kafka最初是由LinkedIn开发,并于2011年初开源. ...

  2. 如何导入XML数据 (python3.6.6区别于python2 环境)

    1.在python2中 代码如下图: 放在python3 环境下执行,将出现如下错误: 原因: python2中形如myTree.keys()[0]这样的写法是没有问题的,因为myTree.keys( ...

  3. JAVA判断时间是否在时间区间内

    package com.liying.tiger.test; import java.text.ParseException; import java.text.SimpleDateFormat; i ...

  4. Vee-validate学习

    Vee-validate使用方法 首先引入 <script src="https://cdn.bootcss.com/vee-validate/2.0.9/vee-validate.j ...

  5. sudo mount -o loop pm.img /mnt/floppy

    sudo mount -o loop pm.img /mnt/floppy 最近在学<一个操作系统的实现>,由于这本书比较老了,所以有一些对于软盘的操作指令现在用会出现一些错误,当我进行虚 ...

  6. VINS紧耦合优化公式及代码解析

    1.首先确定待优化的状态变量 对应代码,优化参数为: Vector3d Ps[(WINDOW_SIZE + )];(平移向量) Vector3d Vs[(WINDOW_SIZE + )];(速度) M ...

  7. onenet基础通信套件返回+CIS ERROR: 50的问题解决

    1. 场景分析,主要问题就是有些操作返回+CIS ERROR: 50 2. 看了一下在AT+MIPLOBSERVERSP这个指令里面是没有返回+CIS ERROR: 50的错误类型的,所以应该是在解析 ...

  8. Android: Requesting root access in your app

    package com.certusnet.videomonitor; import java.util.List; import java.io.IOException; import java.i ...

  9. 「日常训练」Alena And The Heater (CFR466D2D)

    题意(Codeforces 940D) 根据给定要求构建数列,求能构建出相同数列的l和r. 分析 这题写的是真的烦.一定要想到对b串要按照5个5个的看!为什么5个5个的看?因为根据题意,是先看前4个再 ...

  10. tp5.0 模型查询数据的返回类型,分页

    一开始用painate()这个函数的时候,发现有的查询方式不能使用这个函数,由此了解到了模型查询和普通查询返回类型的不同 1.原生查询方法 Db::query("select * from ...