单元测试系列之十一:Jmockit之mock特性详解
本文是Jmockit学习过程中,根据官网所列的工具特性进行解读。
1、调用次数约束(Invocation count constraints)
可以通过调用计数约束来指定预期和/或允许匹配给定期望的调用数。
2、记录严格期望(Recording strict expectations)
一般记录在“new Expectations(){...}”块中的期望是比较常规的。 这意味着他们指定的调用预计在重播阶段至少会发生一次; 而且它们可能会发生不止一次,并且以与其他记录的期望不同的顺序发生; 另外,与任何记录的期望不匹配的调用也同样允许以任何数量和任何顺序发生。但是如果没有调用与给定的记录期望匹配,则在测试结束时抛出“Missing invocation”错误,从而导致测试失败,抛出异常类似如下信息:

严格期望:当记录以后,仅允许在重放期间完全匹配记录(在明确指定的配额内,在需要时)进行调用,匹配调用数(默认情况下只有一个) 并按照它们发生的顺序。 在重播期间发生但未能匹配记录的严格期望的调用被认为是意外的,导致立即的“unexpected invocation”错误,从而导致测试失败。
非严格期望:顾名思义,对期望没有严格要求,mock的方法可以不调用。
1、明确验证(Explicit verification)
2、部分模拟(Partial mocking)
3、没有方法调用从记录切换到重播(No method call to switch from record to replay)
4、没有额外的代码用于隐式验证(No extra code for implicit verification)
5、没有额外的“准备测试”代码(No extra "prepare for test" code)
6、不需要使用@RunWith注释或基础测试类(No need to use @RunWith annotation or base test class)
7、void和非void方法之间的语法一致(Consistent syntax between void and non-void methods)
8、参数匹配仅适用于某些参数(Argument matchers for some parameters only)
9、基于值类型的属性使参数更容易匹配(Easier argument matching based on properties of value objects)
10、级联模拟(Cascading mocks)
11、支持模拟多个接口(Support for mocking multiple interfaces)
12、支持模拟注释类型(Support for mocking annotation types)
13、部分期望(Partially ordered expectations)
14、模拟构造函数和final / static / native / private方法(Mocking of constructors and final/static/native/private methods)
15、模拟/打桩的声明性应用在整个测试类(Declarative application of mocks/stubs to whole test classes)
16、自动注入模拟(Auto-injection of mocks)
17、模拟”新的”对象(Mocking of "new-ed" objects)
18、支持模拟枚举类型(Support for mocking enum types)
19、测试类的声明式模拟(模拟领域)(Declarative mocks for the test class (mock fields))
===================================================================
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

感谢阅读,作者原创技术文章,转载请注明出处
其他推荐相关阅读:
单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率
单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
单元测试系列之七:Sonar 数据库表关系整理一(rule相关)
单元测试系列之十一:Jmockit之mock特性详解的更多相关文章
- Jmockit之mock特性详解
本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...
- 【PHP系列】PHP 7.0新增特性详解
开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大家详细讲解下 http://php.net/manual/en/migration70.new-features.php 1. ?? ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
- C#中的 特性 详解(转载)
本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...
- iOS开发——高级特性&Runtime运行时特性详解
Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...
- C#各个版本中的新增特性详解
序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...
- [js高手之路]深入浅出webpack系列2-配置文件webpack.config.js详解
接着上文,重新在webpack文件夹下面新建一个项目文件夹demo2,然后用npm init --yes初始化项目的package.json配置文件,然后安装webpack( npm install ...
随机推荐
- instrument之Xcode Analyze 代码静态检查及问题解决
Static Code Analysis(静态代码分析)用来发现源代码潜在的错误与缺陷,源代码编译后只有在运行时有可能会产生细微的错误,他们可能难以识别和修复,所以这些潜在的威胁在开发过程中一定要尽可 ...
- [dev] 中文版内核代码编码规范
我是我最喜欢的编码规范.并始终坚持. https://www.kernel.org/doc/html/v4.15/translations/zh_CN/coding-style.html
- Git branch && Git checkout常见用法
https://www.cnblogs.com/qianqiannian/p/6011404.html git branch 和 git checkout经常在一起使用,所以在此将它们合在一起 1.G ...
- java手写线程池,完善中
package com.test001.threadpool; import java.util.LinkedList; import java.util.List; import java.util ...
- STM32 内部flash的读写程序
/* Base address of the Flash sectors */ #define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base ...
- 解析key值不确定的json数据
遇到一个奇葩的需求,一段json的key值是动态的,并且这个key还是有作用的.这就要求在不知道key是多少的情况下去把这段json解析出来. 我用到的方法是迭代器.具体代码如下 JSONObject ...
- 2018-2019-2 网络对抗技术 20165321 Exp2 后门原理与实践
基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 答:网络钓鱼植入木马. (2)例举你知道的后门如何启动起来(win及linux)的方式? 答:绑定在合法软件上启动. (3)Met ...
- JVM TI
JVM TI JVM TI全名Java Virtual Machine Tool Interface,是开发虚拟机监控工具使用的编程接口,它可以监控JVM内部时间的执行,也可以控制JVM的某些行为,可 ...
- ORACLE中 大量数据插入表 SQL
declare g_commit_count number; cursor cu1 is select gl_flexfields_pkg.get_description_sql(gcc.chart_ ...
- RNA-seq标准化
你的 heatmap 可能用错数据了 (组间表达量标准化) http://www.genek.tv/article/24 RNA-seq的标准化方法罗列 https://www.jianshu.com ...