JUnit4---Hamcrest匹配器常用方法总结
一.Hamcrest是什么?
Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests.
Hamcrest 是一个为了测试为目的,且能组合成灵活表达式的匹配器类库。
二.Hamcrest jar包
- hamcrest-core.jar -- This is the core API to be used by third-party framework providers. This includes the a foundation set of matcher implementations for common operations. This API is stable and will rarely change. You will
need this library as a minimum. - hamcrest-library.jar -- The ever-growing library of Matcher implementations. This will grow between releases.
- hamcrest-generator.jar -- A tool to allow many Matcher implementations to be combined into a single class so users don't have to remember many classes/packages to import. Generates code.
- hamcrest-integration.jar -- Provides integration between Hamcrest and other testing tools, including JUnit (3 and 4), TestNG, jMock and EasyMock.
Alternatively, if you don't care:
- hamcrest-all.jar -- Includes all of the above.
import static org.hamcrest.Matchers.*;
测试方法如下:
-
@Test
-
public void testHamcrestMatchers() {
-
// 核心匹配
-
// allOf: 所有条件都必须满足,相当于&&
-
assertThat("myname", allOf(startsWith("my"), containsString("name")));
-
// anyOf: 其中一个满足就通过, 相当于||
-
assertThat("myname", anyOf(startsWith("na"), containsString("name")));
-
// both: &&
-
assertThat("myname", both(containsString("my")).and(containsString("me")));
-
// either: 两者之一
-
assertThat("myname", either(containsString("my")).or(containsString("you")));
-
// everyItem: 每个元素都需满足特定条件
-
assertThat(Arrays.asList("my", "mine"), everyItem(startsWith("m")));
-
// hasItem: 是否有这个元素
-
assertThat(Arrays.asList("my", "mine"), hasItem("my"));
-
// hasItems: 包含多个元素
-
assertThat(Arrays.asList("my", "mine", "your"), hasItems("your", "my"));
-
// is: is(equalTo(x))或is(instanceOf(clazz.class))的简写
-
assertThat("myname", is("myname"));
-
assertThat("mynmae", is(String.class));
-
// anything(): 任何情况下,都匹配正确
-
assertThat("myname", anything());
-
// not: 否为真,相当于!
-
assertThat("myname", is(not("you")));
-
// nullValue(): 值为空
-
String str = null;
-
assertThat(str, is(nullValue()));
-
// notNullValue(): 值不为空
-
String str2 = "123";
-
assertThat(str2, is(notNullValue()));
-
-
-
// 字符串匹配
-
// containsString:包含字符串
-
assertThat("myname", containsString("na"));
-
// stringContainsInOrder: 顺序包含,“my”必须在“me”前面
-
assertThat("myname", stringContainsInOrder(Arrays.asList("my", "me")));
-
// endsWith: 后缀
-
assertThat("myname", endsWith("me"));
-
// startsWith: 前缀
-
assertThat("myname", startsWith("my"));
-
// isEmptyString(): 空字符串
-
assertThat("", isEmptyString());
-
// equalTo: 值相等, Object.equals(Object)
-
assertThat("myname", equalTo("myname"));
-
assertThat(new String[] {"a", "b"}, equalTo(new String[] {"a", "b"}));
-
// equalToIgnoringCase: 比较时,忽略大小写
-
assertThat("myname", equalToIgnoringCase("MYNAME"));
-
// equalToIgnoringWhiteSpace: 比较时, 首尾空格忽略, 比较时中间用单个空格
-
assertThat(" my \t name ", equalToIgnoringWhiteSpace(" my name "));
-
// isOneOf: 是否为其中之一
-
assertThat("myname", isOneOf("myname", "yourname"));
-
// isIn: 是否为其成员
-
assertThat("myname", isIn(new String[]{"myname", "yourname"}));
-
// toString() 返回值校验
-
assertThat(333, hasToString(equalTo("333")));
-
-
-
// 数值匹配
-
// closeTo: [operand-error, operand+error], Double或BigDecimal类型
-
assertThat(3.14, closeTo(3, 0.5));
-
assertThat(new BigDecimal("3.14"), is(closeTo(new BigDecimal("3"), new BigDecimal("0.5"))));
-
// comparesEqualTo: compareTo比较值
-
assertThat(2, comparesEqualTo(2));
-
// greaterThan: 大于
-
assertThat(2, greaterThan(0));
-
// greaterThanOrEqualTo: 大于等于
-
assertThat(2, greaterThanOrEqualTo(2));
-
// lessThan: 小于
-
assertThat(0, lessThan(2));
-
// lessThanOrEqualTo: 小于等于
-
assertThat(0, lessThanOrEqualTo(0));
-
-
-
-
// 集合匹配
-
// array: 数组长度相等且对应元素也相等
-
assertThat(new Integer[]{1, 2, 3}, is(array(equalTo(1), equalTo(2), equalTo(3))));
-
// hasItemInArray: 数组是否包含特定元素
-
assertThat(new String[]{"my", "you"}, hasItemInArray(startsWith("y")));
-
// arrayContainingInAnyOrder, 顺序无关,长度要一致
-
assertThat(new String[]{"my", "you"}, arrayContainingInAnyOrder("you", "my"));
-
// arrayContaining: 顺序,长度一致
-
assertThat(new String[]{"my", "you"}, arrayContaining("my", "you"));
-
// arrayWithSize: 数组长度
-
assertThat(new String[]{"my", "you"}, arrayWithSize(2));
-
// emptyArray: 空数组
-
assertThat(new String[0], emptyArray());
-
// hasSize: 集合大小
-
assertThat(Arrays.asList("my", "you"), hasSize(equalTo(2)));
-
// empty: 空集合
-
assertThat(new ArrayList<String>(), is(empty()));
-
// isIn: 是否为集合成员
-
assertThat("myname", isIn(Arrays.asList("myname", "yourname")));
-
// Map匹配
-
Map<String, String> myMap = new HashMap<String, String>();
-
myMap.put("name", "john");
-
// hasEntry: key && value匹配
-
assertThat(myMap, hasEntry("name", "john"));
-
// hasKey: key匹配
-
assertThat(myMap, hasKey(equalTo("name")));
-
// hasValue: value匹配
-
assertThat(myMap, hasValue(equalTo("john")));
-
}
原文地址:https://blog.csdn.net/neven7/article/details/42489723
JUnit4---Hamcrest匹配器常用方法总结的更多相关文章
- Junit 断言 assertThat Hamcrest匹配器
junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...
- Hamcrest匹配器框架
其实在之前的文章中已经使用过 Hamcrest 匹配器框架,本篇文章将系统的介绍它的使用. 为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架, 可以通过现有的匹配器类检查代码中 ...
- Mockito 2 参数匹配器
Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...
- [Google Guava]字符串处理:连接器、拆分器、字符匹配器
一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供 ...
- EassyMock实践 自定义参数匹配器
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...
- 前端测试框架Jest系列教程 -- Matchers(匹配器)
写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...
- Flask入门之自定义过滤器(匹配器)
1. 动态路由的匹配器? 不知道这种叫啥名,啥用法,暂且叫做匹配器吧. Flask自带的匹配器可以说有四种吧(保守数字,就我学到的) 动态路由本身,可以传任何参数字符串或者数字,如:<user ...
- 【Jest】笔记二:Matchers匹配器
一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...
- BF匹配器
对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.它取两个可选参数,第一个是normType.它指定要使用的距离量度.默认是cv2.NORM_L2.对于SIFT,SURF很 ...
随机推荐
- PHP Laravel系列之环境搭建( VirtualBox+Vagrant+Homestead+系列网址)
搭建环境从来都是阻挡一门新技能的最致命的硬伤,为了这个环境,我又是花费了半天的时间,各种问题层出不穷,下面基于网上的一些教程(我看到的都多少有些问题) 开始的时候是在实验楼这个平台上开始学习的,不过 ...
- pycharm 永久注册
pycharm 使用又到期了,找到了破解版亲测(到期日期2099/12/31),绝对简单好用,直接使用步骤: 一,下载pycharm(windows版): https://www.jetbrains ...
- mysql的执行计划概念说明
explain中的列的说明 1. id列 id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的 顺序增长的. id列越大执行优先级越高, ...
- 序列化方案选型对比 - JSON/ProtocolBuffer/FlatBuffer/DIMBIN
4千字长文预警!! 背景 JSON/XML不好吗? 好,再没有一种序列化方案能像JSON和XML一样流行,自由.方便,拥有强大的表达力和跨平台能力.是通用数据传输格式的默认首选.不过随着数据量的增加和 ...
- python 里内嵌函数是可以修改外部环境里的变量的
python 里内嵌函数是可以修改外部环境里的变量的 关键是细节. 如果是简单变量类型, 那么不可以. 但是如果是容器类变量, 则没问题了. 代码如下: class G: pass def f(): ...
- ps学习教程
1.通道抠图:http://www.16xx8.com/photoshop/tongdaokoutu/
- HZOJ 集合论
考场用的set,代码复杂度很低,时间复杂度$O(sum log)$,一发过了大样例,以为1e6的数据很稳了就没再管(然后就挂掉了……) 考后把set化成unordered_set就A了.其实$sum ...
- 3DMAX安装失败怎样卸载重新安装3DMAX,解决3DMAX安装失败的方法总结
技术帖:3DMAX没有按照正确方式卸载,导致3DMAX安装失败.楼主也查过网上关于如何解决3DMAX安装失败的一些文章,是说删除几个3DMAX文件和3DMAX软件注册表就可以解决3DMAX安装失败的问 ...
- LightOJ 1341 Aladdin and the Flying Carpet【整数分解】
题目链接: http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1341 题意: 给定一个数,将其拆分成两个数的乘 ...
- Pytorch使用tensorboardX网络结构可视化。超详细!!!
https://www.jianshu.com/p/46eb3004beca 1 引言 我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,为了使用tensorbo ...