自从Junit3引进Hamcrest匹配器框架以来,对用Java写单元测试在2个方面有极大的帮助,一个是测试的可读性,一个对失败测试的信息展示。
注:Hamcrest是一个开源的编写匹配器的框架,支持多种语言,Java,Python, Object-C和Ruby。你可以在Github看到所有的源代码:https://github.com/hamcrest
Hamcrest本身自带了很多常用的Matcher, 比方说 equalTo(), notNullValue()等等, 详细的信息可以在Hamcrest的官网查询到。 除了自带的Matcher以外,Hamcrest最大优势还在于你可以轻松的编写自己需要的matcher,以增加测试代码的可读性。例如:
假设你有一个Record对象,从中你可以析取出很多的对象,你想测试析取出对象的属性都来自于这个Record对象, 按照以前的做法,我们需要获取析取出的对象的每一个属性,然后去和原Record的对性属性值比较是否相等,当面对你一个有大量属性的对象时,毫无疑问会有一大堆的get方法,一大堆的equalTo, 我们为什么不能把这样的逻辑封装起来呢? 下面我们就来看一下如何编写一个自己的Matcher。
首先,假设有如下的一个Record对象:
public class MyRecord {
private String name;
private int age;
private String gender;
private String address;
private String phone;
private String email;
我们会把该对象的address,phone,email属性,析取成一个Contact对象:
public Contact generateContact() {
Contact contact = new Contact();
contact.setEmail(email);
contact.setPhone(phone);
contact.setAddress(address);
return contact;
}
我希望的测试能够测试该析取方法,我的测试代码如下:
@Test
public void ContactShouldGenerateFromMyRecord() throws Exception {
Contact contact = record.generateContact();
assertThat(contact, is(generateFrom(record)));
}
@Test
public void newCreateContactShouldNotGenerateFromMyRecord() throws Exception {
Contact contact = new Contact();
assertThat(contact, is(generateFrom(record)));
}
这儿的generateFrom就是我定制的一个Matcher。实现一个Matcher很简单,只需要继承TypeSafeMatcher之类的Hamcrest开发出来的类,然后实现其中的abstract方法就行了。
public class GenerateFrom extends TypeSafeMatcher<Contact> {
private MyRecord record;
public GenerateFrom(MyRecord record) {
this.record = record;
}
@Override
public boolean matchesSafely(Contact item) {
return StringUtils.equals(item.getAddress(),record.getAddress())
&& StringUtils.equals(item.getEmail(),record.getEmail())
&& StringUtils.equals(item.getPhone(),record.getPhone());
}
@Override
public void describeTo(Description description) {
description.appendValue("not extract from record");
}
@Factory
public static Matcher<Contact> generateFrom(MyRecord record){
return new GenerateFrom(record);
}
}
分享到:
相关推荐
Java正则表达式:Pattern类和Matcher类
hamcrest库Matcher库的简单示例 安装(Maven) 最新版本1,3:2012年7月 <groupId>org.hamcrest <artifactId>hamcrest-all <scope>test <version>1.3 没有依赖 匹配的演示文稿 第一次比赛 String s = "a ...
Hamcrest Feature Matcher Generator for POJOs Inspired by lot of dummy work to create matchers for fields in auto-generated beans to write POJO-based tests. Generates Hamcrest's Feature Matchers ...
软件包hamcrest.go提供了几个软件包,您可以根据需要对其进行组装:hamcrest / base:定义Matcher,Result和SelfDescribing类型,并提供工厂函数来创建它们。 (除非您要定义自己的自定义匹配器,否则,
hamcrest-string-matcher 自定义hamcrest匹配器,用于计算子字符串的出现次数。当前的版本当前版本是0.0.5。基本用法 import static io.zinx.hamcrest.string.pattern.OccurrenceMatcher.hasOccurrenceCount;... @...
案例匹配器 这是一个Java 8库,提供了流利的API,以面向对象和功能的方式定义大小写匹配。 该库不能替代Java中的传统switch case语句,但是可以对原始和对象引用值中的case进行更丰富的定义。 与if-then-else级联...
当然也可以通过扩展/实现yakoo5.matcher.Matcher接口来实现自定义的匹配器,满足业务相关的功能。 《yakoo5.matcher-1.0.zip》压缩包内文件说明: (1)Matcher/dist/yakoo5.matcher-1.0.jar - 编译后的二进制class...
当然也可以通过扩展/实现yakoo5.matcher.Matcher接口来实现自定义的匹配器,满足业务相关的功能。 《yakoo5.matcher-1.0.1.zip》压缩包内文件说明: (1)Matcher/dist/yakoo5.matcher-1.0.1.jar - 编译后的二...
现在JDK1.4里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SUN提供的迟来恩物- -对我来说确实如此。 1.简介: java.util.regex是一个...
PyHamcrest, python的Hamcrest匹配器 PyHamcrest 简介PyHamcrest是编写matcher对象的框架,允许你以声明方式定义"匹配"规则。 有很多情况,比如UI验证,或者者数据过滤,但是它在编写灵活测试的区域。 本教程
或将其自己安装为: $ gem install list_matcher 概要 require 'list_matcher' m = List :: Matcher . new puts m . pattern %w( cat dog ) # (?:cat|dog) puts m . pattern %w( cat rat ) # (?:[cr]at) puts m ....
Java中的正则表达式是一种强大的文本匹配工具,它可以用来检查和操作字符串。在Java中,正则表达式的相关类都位于java.util.regex包中。...Matcher matcher = pattern.matcher(input); boolean isMatch = matcher.fin
要求Python 3.6+ ANTLR Python运行时(4.7+) 3) python-dateutil( ) 六个( ) stix2-patterns( ) (用于运行测试)-pytest( )安装用安装: $ pip install stix2-matcher用法安装软件包会创建一个stix2-...
java正则表达式Pattern,Matcher
This is a pattern matcher in common lips. We implement the function match with two parameters: a pattern and a fact. It returns a list of variable-value bindings if the facts match the patterns while ...
NULL 博文链接:https://zeus-lin.iteye.com/blog/2196938
自定义 Matcher for 以测试可访问性 :warning: :raised_hand: 该项目不能保证您所构建的内容是可访问的。 GDS可访问性团队发现,只有。 诸如ax之类的工具类似于诸如或类的 :它们可以找到常见问题,但不能保证您...
matcher与path.Match类似,但是: 支持globstar / doublestar( ** )。 提供快速的Glob功能。 支持组合匹配器。 例子 比赛 package main import "github.com/saracen/matcher" func main () { matched , err :=...
资源分类:Python库 所属语言:Python 资源全名:tfidf_matcher-0.2.1.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源来自pypi官网。 资源全名:lyric_matcher-0.0.8.tar.gz