hamcrest详细介绍
使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null,true它们的可读性并不是很好。而且很多时候我们要比较对象、集合、Map等数据结构。这样我们要么进行大段的字段获取再断言。或者干脆自己编写表达式并断言其结果。
JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。
Hamcrest 提供了大量被称为“匹配器”的方法。其中每个匹配器都设计用于执行特定的比较操作。Hamcrest的可扩展性很好,让你能够创建自定义的匹配器。最重要的是,JUnit也包含了Hamcrest的核心,提供了对Hamcrest的原生支持,可以直接使用Hamcrest。
类图
类实现
hamcrest架构中,主要实现匹配器(Matcher),因此Matcher作为顶层类型。
Matcher
public interface Matcher<T> extends SelfDescribing {//验证对象是否匹配。此处用Object,因为在运行时不知道是什么类型,由实现类决定boolean matches(Object item);//**构造不匹配的缘由。**void describeMismatch(Object item, Description mismatchDescription);
}
BaseMatcher
BaseMatcher作为所有匹配器的基类,不建议直接实现Matcher接口。
public abstract class BaseMatcher<T> implements Matcher<T> {@Overridepublic void describeMismatch(Object item, Description description) {description.appendText("was ").appendValue(item);}@Overridepublic String toString() {return StringDescription.toString(this);}
}
具体匹配器
名称 | 用途 | 说明 |
---|---|---|
CustomMatcher | 仅用于作为匿名内部类的父类 | |
DescribedAs | 为其他Matcher提供一个Description | |
AllOf | 判断多个Mathcer是否同时true。短路方式 | |
IsInstanceOf | 判断是否是指定class的实例 | |
PropertyMatcher | 判断属性值是否匹配 | |
Is | 装饰一个其他Matcher | |
IsAnything | always return true | |
IsEmptyString | 判断不为空字符串 | |
IsEqual | 判断是否equal | |
IsIn | 是否是集合元素 | |
IsNot | 装饰一个其他Matcher,判断Matcher不匹配 | |
IsNull | 判断对象是否为null | |
IsSame | 判断对象是同一个 | |
AnyOf | 判断多个Mathcer是否有一个true。短路方式 | |
TypeSafeMatcher | 类型安全匹配器。把一个类方便的转化为一个Matcher | |
TypeSafeDiagnosingMatcher | 类型安全诊断匹配器。把一个类方便的转化为一个Matcher,并报告为什么不匹配。 |
类型安全匹配器
名称 | 用途 | 说明 |
---|---|---|
BigDecimalCloseTo | 是否近似某个值 | |
HasProperty | 是否有属性 | |
IsArray | 集合是否一一匹配一组Matcher | |
IsArrayContaining | 集合是否有一个元素匹配 | |
IsCloseTo | 是否近似某个值 | |
IsCompatibleType | 一个类是否是另一个类的子类 | |
IsEmptyCollection | 是否是一个空集合 | |
IsEmptyIterable | 迭代是否是空的 | |
IsEqualIgnoringCase | 是否相同,忽略大小写 | |
IsEqualIgnoringWhiteSpace | 是否相同,忽略空白 | |
IsMapContaining<K,V> | Map是否有一个元素匹配 | |
OrderingComparison<T extends Comparable> | 大小比较 | |
StringContainsInOrder | String集合是否都以…开头 | |
SubstringMatcher | 子串匹配 | |
ThrowableMessageMatcher | 异常信息匹配 | |
ReflectiveTypeFinder
此类找到某个类包含某个方法的superclass,从下往上查找。
类型安全诊断匹配器
名称 | 用途 | 说明 |
---|---|---|
CombinableMatcher | 组合匹配器 | and,or, |
Every | 每个元素都匹配 | |
HasPropertyWithValue | 属性值匹配 | |
HasXPath | xml匹配 | |
IsCollectionContaining | 有集合元素匹配 | |
IsEventFrom | 事件源是同一个对象 | |
SamePropertyValuesAs | ||
IsIterableContainingInAnyOrder | ||
IsIterableContainingInOrder | ||
FeatureMatcher<T, U> |
Dsecription
描述不匹配情况的类。每个Matcher描述自己的匹配情况。
NullDescription
丢弃信息
BaseDescription
基础Description,存储为字符串
StringDescription
继承于BaseDescription。存储为String。
Sample
public class Person {String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(String name){this.name =name;}
}
public class HamcrestTest {public static void main(String[] args){Person person = new Person("tom");//IsAnything<Person> anything = new IsAnything<>();boolean matched = anything.matches(person);System.out.println("anything:" + matched);IsEmptyString isEmptyString = new IsEmptyString();matched = isEmptyString.matches("555");System.out.println("isEmptyString:" + matched);IsEqual<Person> isEqual = new IsEqual<Person>(person);matched = isEqual.matches(person);System.out.println("isEqual:" + matched);IsNull<Person> isNull = new IsNull<>();matched = isNull.matches(person);System.out.println("isNull:" + matched);IsSame<Person> isSame = new IsSame<Person>(person);matched = isSame.matches(person);System.out.println("isEqual:" + matched);Is<Person> is = new Is<>(isEqual);matched = is.matches(person);System.out.println("is:" + matched);IsNot<Person> isNot = new IsNot<>(isEqual);matched = isNot.matches(person);System.out.println("isNot:" + matched);IsInstanceOf isInstanceOf = new IsInstanceOf(person.getClass());matched = isInstanceOf.matches(person);System.out.println("isInstanceOf:" + matched);List<Matcher<? super Person>> matchers = new ArrayList<>();matchers.add(is);matchers.add(isSame);AllOf<Person> allOf = new AllOf<Person>(matchers);matched = allOf.matches(person);System.out.println("allOf:" + matched);AnyOf<Person> anyOf = new AnyOf<Person>(matchers);matched = anyOf.matches(person);System.out.println("anyOf:" + matched);HasProperty<Person> hasProperty = new HasProperty<>("name");matched = hasProperty.matches(person);System.out.println("hasProperty:" + matched);HasPropertyWithValue<Person> hasPropertyWithValue = new HasPropertyWithValue<Person>("name",new IsEqual<String>("tom"));matched = hasPropertyWithValue.matches(person);System.out.println("hasPropertyWithValue:" + matched);}
}
结果:
anything:true
isEmptyString:false
isEqual:true
isNull:false
isEqual:true
is:true
isNot:false
isInstanceOf:true
allOf:true
anyOf:true
hasProperty:true
hasPropertyWithValue:true
注意:与属性有关的Matcher,必须保证测试类是public的,方法是public的。
hamcrest详细介绍相关推荐
- HTML页面加载和解析流程详细介绍
浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...
- mysql为什么要压测_mysql集群压测的详细介绍
本篇文章给大家带来的内容是关于mysql集群压测的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通 ...
- php比较运算符案列,PHP实例:PHP比较运算符的详细介绍
<PHP实例:PHP比较运算符的详细介绍>要点: 本文介绍了PHP实例:PHP比较运算符的详细介绍,希望对您有用.如果有疑问,可以联系我们. 比拟运算符种类 PHP实战如同它们名称所暗示的 ...
- Tempdb数据库详细介绍
Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...
- linux路由介绍,Linux的路由表详细介绍
Linux的路由表详细介绍 一 在Linux下执行route命令[root@localhost backup]# route -nKernel IP routing tableDestination ...
- pythonexcel介绍_Python 中pandas.read_excel详细介绍
Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r& ...
- 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...
渡神纪芬尼斯崛起配置要求高吗?本作将在12月3日登陆主机和PC,很多玩家比较关心游戏的配置,这里给大家带来了渡神纪配置要求详细介绍,快来了解下吧. 渡神纪配置要求详细介绍 最低要求(720p/30 f ...
- C++11 unordered_map详细介绍
整理的算法模板合集: ACM模板 目录: 1.介绍 1.1 特性 2. 模版 2.1 迭代器 3. 功能函数 3.1 构造函数 3.2 容量操作 3.2.1 size 3.2.2 empty 3.3 ...
- autosar中com模块_详细介绍AUTOSAR各个模块作用PART1(OS,SYS)
这片文章中我们详细讲解下每个模块的功能,上图是vector的autosar方案,每个模块的详细介绍后续会有单独文章进行讲解,请关注.以下是各个模块的简介 1.VHSM hardware Securit ...
最新文章
- 通过poi操作ppt中的图片
- java不可变量有哪些_5.Java变量
- Hama笔记:Unable to load native-hadoop library 和 Snappy native library not loaded 的解决
- HTML5学习笔记(一)(2015-12-2)【新浪云搬运】
- 利用Oracle虚拟私有数据库进行整合
- 怎么在php项目安装tp5框架,框架安装与基本配置
- 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...
- node mysql 连接池创建_Node.js使用MySQL连接池的方法实例
- OenLayers 事件注册
- 数据结构上机实践第四周项目2 - 建设“单链表”算法库
- libfaac个个参数说明
- 乔布斯:你须寻得所爱(转)
- Windows Media Player 键盘快捷键
- js开源框架最新版下载
- 阿里巴巴的商品主图视频要怎么保存比较快
- 中国工商注册企业统计数据
- 古剑奇谭显示服务器维修,《古剑奇谭网络版》角色转服功能说明公告
- 诺贝尔经济学奖与数学
- iOS苹方字体使用说明
- live555直播startplaying
热门文章
- [导入]较为周全的Asp.net提交验证方案 (下)
- 【SpringBoot】SpingBoot整合AOP
- nodejs的事件循环1
- [Apache Tomcat]server.xml文件详解
- HMAILSERVER集成WEB邮件系统(ROUNDCUBE WEBMAIL)
- 高性能MySQL-3rd-(六)查询性能优化
- SQLPlus 在连接时通常有四种方式
- window server 2012 IE10 增强的安全设置 如何关闭
- 看起来很美 VS. 是你来检阅我的忧伤了吗?
- linux 的内核参数优化,linux 内核参数优化