1.JMockit的两套API实现方式

JMockit提供了两套API,一套叫做Expectations,用于基于行为的单元测试;一套叫做MockUp,用于基于状态的单元测试。    ①.Expectations

record : 录制将要被调用的方法和返回值

参数类型可以是anyXyz,anyString/也可以是with,with的范围更精准
replay:调用录制的方法
verify:基于行为的验证(验证调用次数,验证调用顺序)也可以用assert断言验证

②. MockUp(匿名内部类)

mock-up类是继承mockit.MockUp<T>的类,mock方法是@Mock的方法,T是被mock的类,所以有两种实现方式

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示例相关推荐

  1. 关于vue3的两种API写法——选项API和组合API

    理解什么是选项API写法,什么是组合API写法 Options API 什么是选项API写法:Options API 在vue2.x项目中使用的就是选项API写法 代码风格:data选项写数据,met ...

  2. vuejs中组件的两种不同的编写风格-选项式API及组合式API

    前言 随着vue3的逐渐稳定,以及周边生态的完善,现在vue3已经成为默认的使用方式了的 所以,对于一个前端开发者,Vue2与Vue3都得要会,在vue3中新增很多东西,比如:Fragment,Tel ...

  3. 【深度学习】基于web端和C++的两种深度学习模型部署方式

    深度学习 Author:louwill Machine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基于C++软件集成的方式进行部署 ...

  4. php mysql 连接方法 对比_Mysql实例php连接MySQL的两种方式对比

    <Mysql实例php连接MySQL的两种方式对比>要点: 本文介绍了Mysql实例php连接MySQL的两种方式对比,希望对您有用.如果有疑问,可以联系我们. MYSQL数据库记录一下P ...

  5. memcache两种客户端比较

    1.memcached client for java 客户端API:memcached client for java 网址:http://www.whalin.com/memcached(我从 h ...

  6. 基于web端和C++的两种深度学习模型部署方式

    深度学习Author:louwillMachine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基... 深度学习 Author:l ...

  7. 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

    From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列 ...

  8. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  9. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

最新文章

  1. 贪心:remove K digits移除K个数字
  2. 检索、问答、情感分析产业范例分享,代码模型全开源太香了!
  3. N4 接口是 5G 产业价值的金线
  4. hiredis — Redis 的 C 语言客户端
  5. 为什么要使用路由重分发?
  6. 你吃的瓜子仁,真是老奶奶磕出来的?!
  7. php序列化 java对象,在Java中反序列化一个序列化的php对象
  8. 【机器学习_2】机器学习资料
  9. 配置开发支持高并发TCP连接的Linux应用程序全攻略
  10. 服务器电脑cpu性能排行,服务器cpu性能排行,小编教你服务器cpu性能排行
  11. hdu 1862 hdoj 1862
  12. php screw.so,php_screw
  13. 70句计算机英语,70句必背的经典英文电影台词(中英双语)
  14. python turtle 乌龟赛跑_海龟快跑,turtle碰撞检测小游戏
  15. windows11关闭安全中心的病毒和威胁防护时,打不开,弹出打开应用需要打开windowsdefender链接问题
  16. 使用Qt进行音视频播放
  17. Swift可选类型(Optional)之星耀
  18. 1024程序员节前夕,Bug与Debug的随笔
  19. Excel无法vlookup事件
  20. 华为计算机平台芯片,华为连发两款AI芯片,计算力远超谷歌及英伟达

热门文章

  1. CS224W图机器学习笔记自用:GNN Augmentation and Training
  2. vue中特殊符号的理解如$
  3. yum常见命令-安装与卸载软件
  4. Numpy 中的 Ndarray
  5. 金融银行业安防系统安全防护解决方案
  6. 在php模板引擎smarty下输出大括号
  7. PAT甲级1052:Linked List Sorting (25)
  8. 数据结构——线性表(2)
  9. 人工智能技术在中小学课堂中的应用
  10. 那些年——2 心声共鸣