注意

这里只是介绍原生的Mockito的API,针对SpringBoot应用有更简单的调用方式

# 一、Mockito加载方式

Mockito可以配合JUnit使用,也可以单独使用。有两种方式来引入Mockito

# 1.1 方式:1 不依赖Spring容器

如果你的单测不依赖容器,那么使用这种方式是比较方便和简介的。但是如果 依赖容器,我们是到JUnit的原理是只要发现有一个Runner就会返回,如果这里指定了 MockitoJUnitRunner那么SpringRunner就不会被使用。

指定MockitoJUnitRunner

@RunWith(MockitoJUnitRunner.class)public class ExampleTest {@Mockprivate List list;@Testpublic void shouldDoSomething() {list.add(100);}}
1234567891011

# 1.2 方式:2 依赖容器

方式2是依赖于Spring容器的,所以要求我们在单测方法执行前来通知Mockito来处理 他的逻辑,处理他说使用的注解。JUnit4的@Before注解就是做好的加载时机,因为我们 可以这样写。

/*** 将单测类中依赖Mockito的属性,进行处理。* 帮我们实现 Mockito.mock()*/@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);}
12345678

# 二、Mockito必知概念

# 2.1 完全模拟 Mock

什么是完全模拟,使用的注解就是@Mock。被Mock的对象,所有的方法都不会被 真正的执行。

# 2.2 部分模拟 Spy

部分模拟,使用的注解就是@Spy(间谍一样)。被声明的方法走Mock,没有声明的方法 还是由实例进行执行和反馈。

# 三、代码实例

这里的例子我们为了启动快速,不依赖Spring容器。直接new出来对象。 另外多说一句,其实就算依赖Spring容器,当@Before方法执行前所有的示例其实也都是已经注入好的了。

下面所有的演示围绕这个类进行

public class MockitoEmp {public String getName() {return "真实的MockitoTest";}public Integer getAge() {return 23;}}
123456789

# 3.1 @Mock

手动声明

MockitoEmp mock = Mockito.mock(MockitoEmp.class);
1

说明

前面说了这个是完全模拟,所有的动作都是模拟的。看下面代码颜色 标记的地方,我们只声明了getName使用Mock返回。但是当我们 调用getAge() 的时候竟然也是假数据。

基于注解和@Before自动声明

public class MockitoTest {// 整个对象都是Mock的@Mockprivate MockitoEmp mock = new MockitoEmp();/*** 将单测类中依赖Mockito的属性,进行处理。* 帮我们实现 Mockito.mock()*/@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);}@Testpublic void testMock() {Mockito.doReturn("Mock数据").when(mock).getName();//等价于Mockito.when(mock.getName()).thenReturn("Mock数据");// Mock数据Assert.assertSame("Mock数据", mock.getName());// getAge() 方法没有用Mockito声明动作, 应该是多少呢?Assert.assertSame(0, mock.getAge());// 0System.out.println(mock.getAge());}
}
1234567891011121314151617181920212223242526272829

# 3.2 @Spy

手动声明

MockitoEmp spy = Mockito.spy(MockitoEmp.class);
1

说明

Spy部分模拟,下面的例子和上面基本一样,唯一不一样的是我们吧 @Mock换成了@Spy。 此时getAge() 方法就不是模拟的了。

基于注解和@Before自动声明

public class MockitoTest {// 整个对象都是Mock的@Mockprivate MockitoEmp mock = new MockitoEmp();/*** 将单测类中依赖Mockito的属性,进行处理。* 帮我们实现 Mockito.mock()*/@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);}@Testpublic void testSpy() {Mockito.doReturn("Mock数据").when(spy).getName();// Mock数据Assert.assertSame("Mock数据", spy.getName());// getAge() 方法没有用Mockito声明动作, 应该是多少呢?Assert.assertSame(23, spy.getAge());// 23System.out.println(spy.getAge());}
}
12345678910111213141516171819202122232425262728

Mockito API相关推荐

  1. 如何使用Mockito模拟void方法

    如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我不能用Mockito模拟它,因为我不知道怎么做. 我试图在互联网上找到一个例子,但没有成功. 我的课看起来像这样: public cla ...

  2. 使用强大的 Mockito 测试框架来测试你的代码

    这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 如果你不熟悉 JUnit,请查看下面的教程: http: ...

  3. mockito 静态_在Java 8中使用不带静态导入的Mockito

    mockito 静态 如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常 ...

  4. mockito入门_Mockito入门

    mockito入门 本文是我们名为" 用Mockito测试 "的学院课程的一部分. 在本课程中,您将深入了解Mockito的魔力. 您将了解有关"模拟",&qu ...

  5. 在Java 8中使用不带静态导入的Mockito

    如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常流畅的链接方法调用. ...

  6. 使用强大的 Mockito 来测试你的代码

    北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 作者,曾梓华,稳步前进的机器学习工程师. 原文链接 : Unit tests with Mock ...

  7. java junit mock_使用Mockito进行Java的Mock测试

    测试替身 dummy用于传递,不会真正使用,例如用于填充的方法的参数列表. Fake有简单实现,但通常被简化,比如在内存数据库,而不是真正的数据库中使用. Stub是接口或类中部分实现,测试时使用其实 ...

  8. java mocked_java如何使用Mockito?

    这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 2. 使用mock对象来进行测试 2.1. 单元测试的目 ...

  9. Mock 及 Mockito 教程

    Mockito 教程 Mockito框架官方地址mockito,文档地址,中文版文档. Mockito库能够Mock对象.验证结果以及打桩(stubbing). 1. Mock和Mockito的关系 ...

最新文章

  1. One-Dimensional Battle Ships CodeForces - 567D
  2. C++构造函数之委托构造函数
  3. Java内存泄漏、性能优化、宕机死锁的N种姿势
  4. 中小企业团队敏捷产品开发流程最佳实践
  5. java编程中的di是什么_java-在Spring IoC / DI中使用@Component注释对接口...
  6. Jmeter的基础讲解
  7. 基于python的智能风扇设计_[Micropython]TPYBoardV102 DIY智能温控小风扇
  8. matlab usb采集,求助MATLAB是否支持USB数据采集卡
  9. 拆机芯片DIY一个STM32F401CCU6核心板
  10. 6-3近期工作总结、下一步工作安排及技术知识
  11. 那些年,Java程序员用过的开发工具
  12. 取消 android 内部收费,国产手机硬伤终于被揭开:若安卓系统下半年收费,该如何应对?...
  13. Nginx: 正向与反向代理
  14. 3GPP TS 23501-g51 中英文对照 | 5.3.1 General
  15. 侯捷C++系统工程师
  16. 设计模式----观察者模式
  17. 100行python代码爬取5万条网易新闻评论
  18. iOS 开发者证书、描述文件等详解
  19. GO 语言 Web 开发实战一
  20. php5.4环境搭建_Windows2003下php5.4安装配置教程(Apache2.4)

热门文章

  1. 大气 html5 企业网站,高端大气HTML5科技企业网站响应式网站带后台
  2. 凭什么,CTO 给我这个 SQL 老 Boy 涨了 1万工资?
  3. String类的常用方法API
  4. 咖啡馆如何进行商圈分析确定选址地点
  5. 使用FLEX和Actionscript开发FLASH 游戏-碰撞检测
  6. 未来人类T5-散热改造final版
  7. [cgdc12][nvidia]显卡底层知识
  8. 卡死 App 的神秘字符串,究竟是何方神圣(上)
  9. 个人八股文集合三、操作系统
  10. 双十一即将来临 小心你的口袋