Jmockit使用笔记

测试框架Jmockit集合junit使用

@RunWith(JMockit.class)

写在测试案例类上的注解

@Tested

在测试案例中,写在我们要测试的类上面, 一般用实现类

@Injectable

在测试案例中声明那些我们要测试的类中通过@Autowired注入的类

代码展示如下:

/*** @author: xinruoxiangyang9010* 我们要测试的业务代码*/
@Service
public class MyServicempl implements MyService {@Autowiredprivate MyMapper myMapper;@Overridepublic String testMethod() {return "myService";}
}
/*** @author: xinruoxiangyang9010* 测试案例*/
@RunWith(JMockit.class)
public class MyServicemplTest {@Injectableprivate MyMapper myMapper;@Testedprivate MyServicempl myServicempl;@Testpublic void testMethod() {String result = myServicempl.testMethod();assertEquals("myService", result);}
}

如果测试类中忘了用@Injectable修饰被测试代码中所有的注入对象时, 哪怕遗漏了一个, 就会有如下报错信息:

java.lang.IllegalStateException: Missing @Injectable for field "xxx.xxx.xxx.MyMapper myMapper" in MyServicempl

@Mocked

与@Injectable类似都是在mock对象(这里的mock是指模拟的意思), 但又有区别, @Injectable只会影响被修改的那一个对象, 但是@Mocked 会影响所他所修饰的对象及其子类, 哪怕这个对象时你new出来的; 调用mock对象的方法时不会调用原代码, 会交给JMockit处理, 均返回默认值(int,short,double等返回0,String返回null)

@Mocked
private User user;

Expectations

字面解释预期,就是指定方法在调用时,返回我们想要的结果(当然有时候结果要我们自己提前准备好)

指定代码中使用的工具类返回我们想要的值

/*** @author: xinruoxiangyang9010* 业务代码*/
public class MyStringUtil {public static String getUUID() {return "id_1";}public static String getUUID2() {return "id_2";}
}
/*** @author: xinruoxiangyang9010* 测试案例*/
@RunWith(JMockit.class)
public class MyStringUtilTest {@Testpublic void getUUID() {new Expectations(MyStringUtil.class) {{MyStringUtil.getUUID();result = "123";}};String resultString = MyStringUtil.getUUID();assertEquals("123", resultString);}
}

注意:

第一点 new Expectations(MyStringUtil.class) 这里要把MyStringUtil.class作为参数传进去

第二点 如果Expectations中写的方法, 实际却没有被调用,则测试案例会出现如下错误

@Test
public void getUUID_test2() {new Expectations(MyStringUtil.class) {{MyStringUtil.getUUID();result = "123";MyStringUtil.getUUID2();result = "222";}};String resultString = MyStringUtil.getUUID();assertEquals("123", resultString);
}
Missing 1 invocation to:
xin.ruo.xiang.yang.jmockit.MyStringUtil#getUUID2()
Caused by: Missing invocationsat xin.ruo.xiang.yang.jmockit.MyStringUtil.getUUID2(MyStringUtil.java)at xin.ruo.xiang.yang.jmockit.MyStringUtilTest$2.<init>(MyStringUtilTest.java:35)at xin.ruo.xiang.yang.jmockit.MyStringUtilTest.getUUID_test2(MyStringUtilTest.java:31)

在Expectations中指定某个方法被调用多次,返回不同结果

    @Testpublic void getUUID_test3() {new Expectations(MyStringUtil.class) {{MyStringUtil.getUUID();result = "111";result = "222";result = "333";}};String resultString = MyStringUtil.getUUID();assertEquals("111", resultString);String resultString2 = MyStringUtil.getUUID();assertEquals("222", resultString2);String resultString3 = MyStringUtil.getUUID();assertEquals("333", resultString3);}

这里结合Expectations的使用对@Mocked与@Injectable的不同再进行一下解释

/*** @author: xinruoxiangyang9010* 业务代码*/
public class DiffServiceImpl implements DiffService {public String method() {return "real";}
}
/*** @author: xinruoxiangyang9010* 测试案例*/
@RunWith(JMockit.class)
public class MockAndInjectTest {@Testpublic void testMock(@Mocked DiffServiceImpl diffService) {new Expectations() {{diffService.method();result = "mockMethod";}};assertEquals("mockMethod", diffService.method());// @Mocked修饰的变量,即便是再new出来的,也会按照上面我们mock的结果返回assertEquals("mockMethod", new DiffServiceImpl().method());}@Testpublic void testInjectable (@Injectable DiffServiceImpl diffService) {new Expectations() {{diffService.method();result = "mockMethod";}};assertEquals("mockMethod", diffService.method());// 注意这里结果的不同, 在对@Injectable修饰的对象进行Expectations指定结果时// 受影响的只是被修饰的对象,如果我们new一个示例出来,是不会受Expectations影响的assertEquals("real", new DiffServiceImpl().method());}
}

Jmockit使用笔记_基本功能使用@Tested_@Injectable_@Mocked_Expectations相关推荐

  1. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组

    ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...

  2. 系统架构师学习笔记_第六章(下)_连载

    系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1  开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...

  3. ps计算机软件专用报告,PS笔记_计算机软件及应用_IT计算机_专业资料

    PS笔记_计算机软件及应用_IT计算机_专业资料 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 窗口菜单:1 ?窗口菜单中可以查找文 ...

  4. 数字IC设计学习笔记_静态时序分析STA_ STA基本概念

    数字IC设计学习笔记 STA基本概念 1. STA基本概念 2. 时序弧概念 Timing Arc 3. 建立时间和保持时间概念 4. 时序路径概念Timing Path 5. 时钟域概念clock ...

  5. 模电学习笔记_双极型晶体管及其放大电路(2)

    前置:双极型晶体管及其放大电路(1) 一.基本知识点 补充:集成电路中元器件的特点 1.单个元件的参数精度不高,且受温度影响较大,但参数对称性及温度对称性较好.批量间差异较大 2.集成电路工艺制造出的 ...

  6. python笔记_第三周

    python笔记_第三周 第十天 回调函数 回调函数就是一个被作为参数传递的函数把函数a当做一个值 赋值给函数b的形参, 在调用函数b的时候 在函数体内 适当的实际调用函数a, 这个函数a就是回调函数 ...

  7. 关于幂律分布的一个笔记_哈克_新浪博客

    关于幂律分布的一个笔记_哈克_新浪博客 关于幂律分布的一个笔记     (2011-03-02 18:12:27)     转载▼     标签:     幂律     二八法则     杂谈     ...

  8. Effective C++笔记_条款31将文件间的编译依存关系降至最低

    Effective C++笔记_条款31将文件间的编译依存关系降至最低 这个章节,读了两遍还是不是很清楚,有一种没法和作者沟通的感觉,看来我还是一个C++的初学者呀.好吧,不多说了,回归主题,今天的笔 ...

  9. 02 - Unit07:显示笔记下拉菜单、笔记的分享功能、笔记的删除功能

    显示笔记下拉菜单 笔记的分享功能 发送Ajax请求 绑定事件:绑定分享按钮单击事件 参数获取:笔记ID 发送请求:/share/add.do 服务器处理 ShareController ShareSe ...

最新文章

  1. bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
  2. carsim8.02和matlab2016b的联合仿真,找不到carsim s-function的解决办法
  3. 如何分析IBASE对应的icon无法正常显示的问题
  4. 项目-团队-技术-个人(专业篇)
  5. 使用fastapi时在py文件中无法正常引用
  6. 浏览器插件镜像下载地址
  7. 超级外链SEO工具源码 可发9600条优质外链
  8. ASP.NET压力测试
  9. python打印各种三角形_如何使用Python 打印各种三角形
  10. 异常处理·EF·准备命令定义时发生错误。有关详细信息,请参阅内部异常
  11. 云服务器系统结构图,云服务器系统结构图
  12. 光伏组件高温自燃?台湾一屋顶光伏电站起火
  13. git 克隆到指定分支
  14. 将 Amazon EC2 到 Amazon S3 的数据传输推向100Gbps线速
  15. Java简单项目 水果摊
  16. 网络编程——UDP协议的实践(词典翻译服务器(英译汉))
  17. pqc的中文全称_OQC 、PQC、LQC、OQA的英文分别是什么?主要做什么?
  18. Qt QRegExp正则表达式
  19. 事件驱动框架(二)——状态机
  20. 苹果ll是什么版本_新的iPad Pro和旧版本有什么区别?苹果背后的策略是什么?...

热门文章

  1. 今天收到一封MAIL,是转发了N次转发过来的,标题就叫 FW 听说是真有此事 ,内容如下(我是不信的,至于你怎么
  2. Email营销相关名词解释:PEM,UCE,Opt-in,Double Opt-In,Opt-out
  3. Tensorflow移动端之如何将自己训练的MNIST模型加载到Android手机上
  4. 对输入的两个分数选择‘+’、‘-’、‘*’、‘/’四则运算,并以分数形式输出结果。输入:第一行先输入整数T,表示总共有T组数据。接下来共T行,每行输入分数形式的算术表达式。 输出:最简分数形
  5. C语言实现扫雷完整算法详解~(附完整代码~)
  6. Linux中 安装一些实用小软件总结
  7. 谈一谈url实现文件下载
  8. Ovftool安装导出vsphere虚拟机
  9. 期货基本面分析:乙二醇期货库存减少,甲醇期货企业库存升至年内最高水平
  10. 资深工程师专业评测--安卓免费的银行卡识别SDK,华为 HMS MLKit 和Card IO哪个好?