Mockito模拟器
1概述
Mickito模拟器是主流的单元测试框架之一,它需要与Junit测试框架一起使用.
2.相关概念
2.1存根类(Stub)
存根(Stub)类是实现了一个接口或者抽象类的类,可以在测试过程中可以使用该类对象调用该类的方法进行测试.存根类的对象需要手动创建.如:
Private PingAnEnterService pingAnEnterService = new PingAnEnterServiceImpl();
2.2模拟对象 (Mock)
模拟对象(mock object)是一个接口或者类的虚拟实现.可以使用mock(T.class)方法或使用@Mock注解生成模拟对象.如:
//模拟创建一个List对象
List mock = mock(List.class);
或
@Mock
private List<String,Object> list;
存根和模拟对象都可以传递给其他的对象进行测试。你的一些单元测试可以测这些类的正确性等。利用存根对象或者模拟对象可以保证测试过程中不受到其他的影响
3.对应的注解
3.1 @Mock
生成一个模拟对象.与方法mock(T t)作用一样.有个name属性,可以设置对象的别名.
3.2 @InjectMocks
创建一个实例,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中.
注意:必须使用@RunWith(MockitoJUnitRunner.class) 或 Mockito.initMocks(this)进行mocks的初始化和注入。如下:
方式一:
@RunWith(MockitoJUnitRunner.class)
public class Test{
@InjectMocks //创建someHandler实例
private SomeHandler someHandler;
@Mock
private OneDependency oneDependency; // 此mock将被注入到someHandler
}
方式二:
public class Test{
@InjectMocks
//创建someHandler实例. SomeHandler是类
//private SomeHandler someHandler;
//创建someHandler实例. SomeHandler是接口
private SomeHandler someHandler = new SomeHandlerImpl();
@Mock
private OneDependency oneDependency; // 此mock将被注入到someHandler
@Before
public void before(){
MockitoAnnotations.initMocks(this);
//给模拟对象属性赋值
when(oneDependency.setOpenId).thenReturn(“mlsama”);
. . .
}
}
4.Mockito的限制
以下的类型不能进行构造:
终态类(final classes)
匿名类(anonymous classes)
基本数据类型(primitive types)
5.模拟对象的配置
其实就是对使用@Mock或mock(T t)创建的模拟对象方法设置返回值(通过set方法完成成员变量赋值).
5.1方式一
设置返回值:
when(mock.method()).thenReturn(value)
设置返回异常:
when(mock.method()).thenThrow(new XXXException())
迭代风格: 第一次调用返回,第二次返回
when(mock.method()).thenReturn("Hello").thenReturn("World")
例如:
@Test
public void mock1(){
//模拟创建一个List对象
List mock = mock(List.class);
//这里也可以: thenReturn (new RuntimeException());
when(mock.get(1)).thenReturn(1);
when(mock.get(1)).thenThrow(newRuntimeException());
System.out.println(mock.get(1));//抛异常
}
需要注意的是: when(T t),所以里面的方法的返回值不能是void
5.2方式二
设置返回值:
doReturn(value).when(mock) .method()
设置返回异常:
doThrow(new XXXException()).when(mock) .method()
例如:
@Test
public void mock1(){
//模拟创建一个List对象
List mock =mock(List.class);
doReturn(1), when(mock) .get(1);
doThrow(new RuntimeException()).when(mock) .get(1);
System.out.println(mock.get(1));//抛异常
}
注意:以上方式不支持返回值为void的方法.
5.3对void方法进行方法预期设定
doNothing() 模拟不做任何返回(mock对象void方法的默认返回)
doNothing().when(mock).remove();
doThrow(Throwable) 模拟返回异常
doThrow(new RuntimeException()).when(mock).remove();
6.验证模拟对象的行为
Mockito 跟踪了所有的方法调用和参数的调用情况。verify()可以验证方法的行为。
格式:
verify(模拟对象).模拟对象的方法( 参数列表 )
查看下面的例子:
@Test
public void testMap() {
Map mock =Mockito.mock( Map.class );
Mockito.when(mock.get( "city" ) ).thenReturn( "深圳" );
// test code
assertEquals("城市测试", "深圳", mock.get( "city" ) );
Mockito.verify(mock).get( Matchers.eq( "city" ) );
Mockito.verify(mock, Mockito.times( 2 ) );
}
7. Spy
@Spy 或者方法 spy() 可以包含一个真实的对象. 每次调用,除非特出指定,否则委托给该真实对象的调用.
@Test
public void testSpy() {
// Lets mock aLinkedList
List list = new LinkedList();
list.add("yes" );
List spy =Mockito.spy(list);
//You have to usedoReturn() for stubbing
assertEquals("yes", spy.get( 0 ) );
Mockito.doReturn("foo").when(spy).get(0);
assertEquals("foo", spy.get( 0 ) );
}
Mockito模拟器相关推荐
- Mockito一个用于Java开发的伟大的模拟框架
原文地址:https://www.codeproject.com/articles/516360/mockito-a-great-mock-framework-for-java-developmen ...
- 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具 单元 ...
- 7种方法检测安卓模拟器_两种不同的模拟方法
7种方法检测安卓模拟器 无论您选择采用TDD还是采用更传统的方法,都将单独测试类. 这通常意味着您使用接口进行编码,并将依赖项注入类中. 去年,我不得不测试一个servlet. Servlet是展示容 ...
- cmodel模拟器开发
cmodel模拟器开发 对于一个公司来说,产品的设计周期就是生命线,一般来说都会在设计功能级仿真的c-model后直接转向RTL设计. 在目前的技术下,做cycle-by-cycle的设计和直接RTL ...
- Android模拟器学framework和driver之传感器篇1(linux sensor driver)
对于android模拟器开发环境的搭建这里我就不多说了,网上google下一大堆,还有就是android 模拟器的kernel使用的是goldfish的kernel,可以使用git得到源码,然后就可以 ...
- 模拟器不全屏_iOS 14实测GBA游戏模拟器下载
玩捷径 - 带你玩转iPhone捷径 hello大家好,我是小唐.因公众号目前的推送机制已改变,可能有时候会看不到小唐新写的作文. 建议大家点击公众号资料页面右上角「...」,把公众号设为星标(置顶) ...
- 华为鸿蒙运行视频,某游戏在华为鸿蒙运行,被识别成使用安卓模拟器
IT 之家 5 月 14 日消息 华为在 2019 年开发者大会上正式推出了鸿蒙 OS 系统,并首先应用在智慧屏等产品上,并于 2020 年开发者大会上宣布为智能手机升级支持鸿蒙 HarmonyOS ...
- 开源游戏机java模拟器_最棒的 7 款开源终端模拟器
你是系统管理员,Linux 重度用户,或者只是每天要在命令行花费大量时间的用户?选择哪种终端仿真程序,可能跟个人的喜好有关.你是喜欢轻量级呢,还是探索全部功能和可定制化的选项?或者只使用发行版给的默认 ...
- Udacity机器人软件工程师课程笔记(二十五) - 使用PID控制四轴飞行器 - 四轴飞行器(四旋翼)模拟器
1.四轴飞行器运动学和动力学模型 在讨论四轴飞行器时,明确定义两个参考坐标系会很有帮助:一个固定的世界坐标系W{W}W和一个牢固地附着到四轴飞行器的质心(CoM)的运动坐标系B{B}B. 假设运动坐标 ...
最新文章
- Ian Thiel:靠这 3 点,实现 30 倍增长,从不盈利到营收 5.5 亿
- django的from组件
- java map 实现 序列化,MapReduce序列化
- 科大奥锐实验报告霍尔效应_大学物理实验报告系列之霍尔效应
- python在材料方面的应用_python记录材料题带标准答案
- mysql 案例~ 主从复制转化为级联复制
- WEB-INF 目录下的文件无法直接浏览器访问
- iptables原理知识
- C#基础7:类的定义
- 聚焦四个重组,构建基于IPD的卓越研发体系(3.0版)
- 西门子PLC S7-200 SMART简介
- 高性能MySQL(第3版) 中文PDF带目录清晰版
- 南航率先启用“手机登机”
- PageRank实践-博客园用户PageRank排名
- Navicat导出整个数据库(可以直接迁移,不会因为外键关系而导致导入不了)
- 滴滴渡劫:“先活着再说”
- php+fpm+加大request,php-fpm配置 - 小良下山化了个缘的个人空间 - OSCHINA - 中文开源技术交流社区...
- 3.1selenium自动化测试基本操作
- 数字式声纳设计原理 pdf_低频数字式相位测试仪的原理与使用
- 开元硬件平台 Arduino
热门文章
- 前世看今生,从JavaEE到微服务
- 转换成大写日期(中文)
- 端接电阻与阻抗匹配那些事
- 幻想传说:全技能奥义、料理、物品、称号、交易品 获得条件(图文)
- 计算机科学——图论专题
- PX4代码学习系列博客(6)——offboard模式位置控制代码分析(之前转载过,这是第二次转载了)
- phpstudy mysql无限重启_phpstudy mysql无限重启 错误日志显示以下内容5.7.26/8.0.12
- 服务器安装frps实现内网穿透(3)-服务端nginx和frps共用80/443端口
- IT资源汇总全分享,学习资料免费领取处
- 《体育画报》直接推出虚拟现实泳装特辑,赚尽眼球