JMockit两种API实现不同方面mock示例
1.JMockit的两套API实现方式
JMockit提供了两套API,一套叫做Expectations,用于基于行为的单元测试;一套叫做MockUp,用于基于状态的单元测试。 ①.Expectations
record : 录制将要被调用的方法和返回值
参数类型可以是anyXyz,anyString/也可以是with,with的范围更精准
replay:调用录制的方法
verify:基于行为的验证(验证调用次数,验证调用顺序)也可以用assert断言验证
②. MockUp(匿名内部类)
mock-up类是继承 |
|
1.继承 |
2.实例 |
public class testName extends MockUp<Dependency> { @Mock public void mockMethod() {} } |
public class testName { new MockUp<T>(T.class) { @Mock public void mockMethod() {} }; } |
2.Jmockit常用注解
①@Tested和@Mocked
用@Tested和@Mocked标注被测试类,在运行测试方法时,如果该实例仍然为null,JMockit会自动组装相关mock对象,进行初始化。在组装被测试类过程中,相关mock对象必须使用@Injectable标记,非mock对象除了使用@Injectable标记,还需要有明确初始值。
②@Capturing
使用@Capturing标注基类/接口,所有实现类会被mock:
abstract方法或者接口方法不能被直接mock。
3.参考学习网址
①.JMockit中文网
http://jmockit.cn/index.htm
②.JMockit中文教程
https://www.jianshu.com/c/cfe7310a18ff
4.示例代码
//要测试的类,不同的方法(无返回值,有参数,有返回值,方法直接内部调用,实体类,私有方法)
public class SayHelloUndertest {public void initHello(){System.out.println("我是没有参数,没有返回值的方法,只看调用次数就ok");}public String sayHello() {System.out.println("我是有返回值");return "hello,JMockit";}public Student initStudent(String sName,Integer age){Student student=new Student();student.setAge(age);String name =initStudentName(sName);student.setName(name);return student;}public String initStudentName(String name ){return name ;}private String privateMethod(){return "privateMethod";}}
/*** Expectations的API验证方式* 录制-回放-验证* @throws Exception*/
@RunWith(JMockit.class)
public class ExpectationsTest {@MockedSayHelloUndertest sayHelloUndertest;@Testpublic void testName() throws Exception {//录制new Expectations(){{sayHelloUndertest.sayHello();result="exp:sayHello";//参数类型可以是anyXyz,anyString/也可以是with,with的范围更精准sayHelloUndertest.initStudentName(anyString);result="花花";}};//回放sayHelloUndertest.sayHello();sayHelloUndertest.initStudentName("lala");//验证(两种方式1.断言;2.Verifications)new Verifications() {{sayHelloUndertest.sayHello();times=1;}};//String mString=sayHelloUndertest.sayHello();//assertTrue(mString.equals("exp:sayHello"));String mString=sayHelloUndertest.initStudentName("");assertTrue(mString.equals("花花"));}}
/*** 使用mockUp的API验证方式* * @author junjiexu3**/
@RunWith(JMockit.class)
public class MockUpTest {@Testpublic void testName() throws Exception {new MockUp<SayHelloUndertest>(SayHelloUndertest.class) {// 公共方法无返回值@Mockpublic void initHello() {System.out.println("ok");}// 公共方法有返回值@Mockpublic String sayHello() {return "MockUp:hello,JMockit";}// 公共方法返回实体且里面方法中包含mock方法@Mockpublic Student initStudent(String sName, Integer age) {Student student = new Student();student.setAge(age);student.setName(initStudentName(sName));return student;}@Mockpublic String initStudentName(String name) {return "YOYO";}};SayHelloUndertest undertest = new SayHelloUndertest();// 验证无返回值的undertest.initHello();// 验证有返回值的(public)String msg = undertest.sayHello();assertTrue(msg.equals("MockUp:hello,JMockit"));// 验证有返回值的(实体)Student student = new Student();// student=undertest.initStudent("Jessise", 12);student = undertest.initStudent("123", 12);assertTrue(student.getName().equals("YOYO"));}//使用静态方法,通过继承mockUp实现私有方法的调用public static class privateMethodMock extends MockUp<SayHelloUndertest> {// mock私有方法@Mockprivate String privateMethod() {return "mock1:privateMethod";}}@Testpublic void testPrivateMethod() throws Exception {assertTrue(new privateMethodMock().privateMethod().equals("mock1:privateMethod"));}
JMockit两种API实现不同方面mock示例相关推荐
- 关于vue3的两种API写法——选项API和组合API
理解什么是选项API写法,什么是组合API写法 Options API 什么是选项API写法:Options API 在vue2.x项目中使用的就是选项API写法 代码风格:data选项写数据,met ...
- vuejs中组件的两种不同的编写风格-选项式API及组合式API
前言 随着vue3的逐渐稳定,以及周边生态的完善,现在vue3已经成为默认的使用方式了的 所以,对于一个前端开发者,Vue2与Vue3都得要会,在vue3中新增很多东西,比如:Fragment,Tel ...
- 【深度学习】基于web端和C++的两种深度学习模型部署方式
深度学习 Author:louwill Machine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基于C++软件集成的方式进行部署 ...
- php mysql 连接方法 对比_Mysql实例php连接MySQL的两种方式对比
<Mysql实例php连接MySQL的两种方式对比>要点: 本文介绍了Mysql实例php连接MySQL的两种方式对比,希望对您有用.如果有疑问,可以联系我们. MYSQL数据库记录一下P ...
- memcache两种客户端比较
1.memcached client for java 客户端API:memcached client for java 网址:http://www.whalin.com/memcached(我从 h ...
- 基于web端和C++的两种深度学习模型部署方式
深度学习Author:louwillMachine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基... 深度学习 Author:l ...
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列 ...
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
最新文章
- 贪心:remove K digits移除K个数字
- 检索、问答、情感分析产业范例分享,代码模型全开源太香了!
- N4 接口是 5G 产业价值的金线
- hiredis — Redis 的 C 语言客户端
- 为什么要使用路由重分发?
- 你吃的瓜子仁,真是老奶奶磕出来的?!
- php序列化 java对象,在Java中反序列化一个序列化的php对象
- 【机器学习_2】机器学习资料
- 配置开发支持高并发TCP连接的Linux应用程序全攻略
- 服务器电脑cpu性能排行,服务器cpu性能排行,小编教你服务器cpu性能排行
- hdu 1862 hdoj 1862
- php screw.so,php_screw
- 70句计算机英语,70句必背的经典英文电影台词(中英双语)
- python turtle 乌龟赛跑_海龟快跑,turtle碰撞检测小游戏
- windows11关闭安全中心的病毒和威胁防护时,打不开,弹出打开应用需要打开windowsdefender链接问题
- 使用Qt进行音视频播放
- Swift可选类型(Optional)之星耀
- 1024程序员节前夕,Bug与Debug的随笔
- Excel无法vlookup事件
- 华为计算机平台芯片,华为连发两款AI芯片,计算力远超谷歌及英伟达