Mockito API
注意
这里只是介绍原生的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);}}
# 1.2 方式:2 依赖容器
方式2是依赖于Spring容器的,所以要求我们在单测方法执行前来通知Mockito来处理 他的逻辑,处理他说使用的注解。JUnit4的@Before注解就是做好的加载时机,因为我们 可以这样写。
/*** 将单测类中依赖Mockito的属性,进行处理。* 帮我们实现 Mockito.mock()*/@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);}
# 二、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;}}
# 3.1 @Mock
手动声明
MockitoEmp mock = Mockito.mock(MockitoEmp.class);
说明
前面说了这个是完全模拟,所有的动作都是模拟的。看下面代码颜色 标记的地方,我们只声明了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());}
}
# 3.2 @Spy
手动声明
MockitoEmp spy = Mockito.spy(MockitoEmp.class);
说明
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());}
}
Mockito API相关推荐
- 如何使用Mockito模拟void方法
如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我不能用Mockito模拟它,因为我不知道怎么做. 我试图在互联网上找到一个例子,但没有成功. 我的课看起来像这样: public cla ...
- 使用强大的 Mockito 测试框架来测试你的代码
这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 如果你不熟悉 JUnit,请查看下面的教程: http: ...
- mockito 静态_在Java 8中使用不带静态导入的Mockito
mockito 静态 如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常 ...
- mockito入门_Mockito入门
mockito入门 本文是我们名为" 用Mockito测试 "的学院课程的一部分. 在本课程中,您将深入了解Mockito的魔力. 您将了解有关"模拟",&qu ...
- 在Java 8中使用不带静态导入的Mockito
如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常流畅的链接方法调用. ...
- 使用强大的 Mockito 来测试你的代码
北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 作者,曾梓华,稳步前进的机器学习工程师. 原文链接 : Unit tests with Mock ...
- java junit mock_使用Mockito进行Java的Mock测试
测试替身 dummy用于传递,不会真正使用,例如用于填充的方法的参数列表. Fake有简单实现,但通常被简化,比如在内存数据库,而不是真正的数据库中使用. Stub是接口或类中部分实现,测试时使用其实 ...
- java mocked_java如何使用Mockito?
这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 2. 使用mock对象来进行测试 2.1. 单元测试的目 ...
- Mock 及 Mockito 教程
Mockito 教程 Mockito框架官方地址mockito,文档地址,中文版文档. Mockito库能够Mock对象.验证结果以及打桩(stubbing). 1. Mock和Mockito的关系 ...
最新文章
- One-Dimensional Battle Ships CodeForces - 567D
- C++构造函数之委托构造函数
- Java内存泄漏、性能优化、宕机死锁的N种姿势
- 中小企业团队敏捷产品开发流程最佳实践
- java编程中的di是什么_java-在Spring IoC / DI中使用@Component注释对接口...
- Jmeter的基础讲解
- 基于python的智能风扇设计_[Micropython]TPYBoardV102 DIY智能温控小风扇
- matlab usb采集,求助MATLAB是否支持USB数据采集卡
- 拆机芯片DIY一个STM32F401CCU6核心板
- 6-3近期工作总结、下一步工作安排及技术知识
- 那些年,Java程序员用过的开发工具
- 取消 android 内部收费,国产手机硬伤终于被揭开:若安卓系统下半年收费,该如何应对?...
- Nginx: 正向与反向代理
- 3GPP TS 23501-g51 中英文对照 | 5.3.1 General
- 侯捷C++系统工程师
- 设计模式----观察者模式
- 100行python代码爬取5万条网易新闻评论
- iOS 开发者证书、描述文件等详解
- GO 语言 Web 开发实战一
- php5.4环境搭建_Windows2003下php5.4安装配置教程(Apache2.4)