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.
三.常用方法介绍
一般,在项目中导入hamcrest-core.jar, hamcrest-library.jar就能满足使用。
Eclipse新建一个JUnit test case; 测试类导入
import static org.hamcrest.Matchers.*;
测试方法如下:

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;/*** Hamcrest演示.<br>* @author gongqiang <br>* @version 1.0.0 2021年6月16日<br>* @see * @since JDK 1.5.0*/
public class HamcrestDemo {/*** 核心匹配.*/@Testpublic void coreMatcher() {// 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("myname", is(equalTo("myname")));//assertThat("mynmae", is(String.class));assertThat("mynmae", is(instanceOf(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()));}/*** 字符串匹配.*/@Testpublic void stringMatcher() {// 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"));// emptyString(): 空字符串assertThat("", emptyString());// equalTo: 值相等, Object.equals(Object)assertThat("myname", equalTo("myname"));assertThat(new String[] {"a", "b"}, equalTo(new String[] {"a", "b"}));// equalToIgnoringCase: 比较时,忽略大小写assertThat("myname", equalToIgnoringCase("MYNAME"));// equalToCompressingWhiteSpace: 比较时, 首尾空格忽略, 比较时中间用单个空格assertThat(" my \t name ", equalToCompressingWhiteSpace(" my name "));// oneOf: 是否为其中之一assertThat("myname", oneOf("myname", "yourname"));// in: 是否为其成员assertThat("myname", in(new String[]{"myname", "yourname"}));// toString() 返回值校验assertThat(333, hasToString(equalTo("333")));}/*** 数值匹配.*/@Testpublic void numberMatcher() {// 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));}/*** 集合匹配*/@Testpublic void collectionMatcher() {// 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>(), empty());assertThat(new ArrayList<String>(), is(empty()));// in: 是否为集合成员assertThat("myname", in(Arrays.asList("myname", "yourname")));assertThat("myname", is(in(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌大脑2017总结下篇:从医疗、机器人等6个领域开始的改变世界之旅

作者&#xff1a;camel概要&#xff1a;Jeff Dean发表了这篇博文的下篇&#xff0c;内容包括谷歌大脑在 AI 应用方面&#xff08;诸如医疗、机器人、创新、公平和包容等&#xff09;的工作。昨天谷歌大脑&#xff08;Google Brain&#xff09;负责人 Jeff Dean 在 Google Resea…

敏捷开发原则

1、我们最优先要做的是通过尽早的、持续的交互有价值的软件来使客户满意。 2、即使到了开发的后期&#xff0c;也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 3、经常性地交付可以工作的软件&#xff0c;交付的间隔可以几周~几月&#xff0c;交付的时间间隔越短越…

java xml 序列化_java-序列化为XML时忽略父类

当子类列表上有XmlElement时,是否有一个JAXB注释可以忽略父类&#xff1f;只是要澄清一下-我想知道是否有比将所有父类的getter / setter标记为瞬态更好的方法,然后不得不回到子类并添加getter / setter并将它们标注为XmlElements一个例子&#xff1a;public class GenericHelp…

Gartner:人工智能将改变个人设备领域的游戏规则

来源&#xff1a;人工智能和大数据概要&#xff1a;目前&#xff0c;AI正在产生多种颠覆性力量&#xff0c;重塑我们与个人技术互动的方式。近日&#xff0c;Gartner公司预测&#xff0c;随着情感人工智能&#xff08;AI&#xff09;日臻成熟&#xff0c;个人设备到2022年将比您…

极限编程实践

1、客户作为团队成员 谁是客户&#xff1f;XP团队中的客户是指定义产品的特性并排列这些特性优先级的人或团体。 最好是客户和开发人员在一个房间中工作。 2、用户故事 对于做计划而言&#xff0c;了解需求只需要做到能够估算它的程度就足够了&#xff0c;需求的特定细节很可能…

南开大学java考试试题_2014秋学期南开大学《Java语言程序设计》在线作业附答案...

2014秋学期南开大学《Java语言程序设计》在线作业附答案1.下列代码中&#xff0c;将引起一个编译错误的行是(D)。1)public class Test{ 2) int m,n; 3) public Test(){} 4) public Test(inta){ma;} 5) public static void main(String args[]){ 6) Test t1,t2; 7) int j,k;8) j…

张小龙演讲干货:微信的未来在哪?这里有7个答案

来源&#xff1a;钱塘大数据概要&#xff1a;1月15日&#xff0c;以“to be正当时”为主题的2018微信公开课Pro版在广州举行&#xff0c;腾讯集团高级执行副总裁、微信事业群总裁张小龙出席并发表演讲。1月15日&#xff0c;以“to be正当时”为主题的2018微信公开课Pro版在广州…

敏捷软件开发—原则、模式与实践总结

思维导图&#xff1a;https://www.processon.com/view/link/60d46dfb5653bb049a469068

java 配置写成表达式_Java的正则表达式之小结

一直很奇怪为什么Java和Tcl的正则表达式之间有这样的一个差异&#xff0c;即Tcl正则表达式中的转义符\在Java正则表达式中一律会需要写成\\。比如&#xff0c;Tcl的正则表达式为 "^Case\_name\s*\\s*(.*)"对应的Java正则表达式则需要写成 "^Case\\_name\\s*\\\s…

AWS VS 阿里云 VS 腾讯云 国内三大云服务商云主机评测报告

来源&#xff1a;CloudBest概要&#xff1a;近几年&#xff0c;随着国内公有云市场规模的不断增长&#xff0c;以阿里云、腾讯云为代表的本土云服务商&#xff0c;以及以AWS、微软Azure为代表的海外云服务商&#xff0c;成为公有云市场最大的赢家&#xff0c;市场寡头化趋势已经…

单一职责原则(SRP)

单一职责原则&#xff08;The Single Responsibility Principle&#xff0c;SRP&#xff09; 就一个类而言&#xff0c;应该仅有一个引起它变化的原因。 为何要把两个职责分离到单独的类中&#xff1f; 因为每一个职责都是变化的一个轴线&#xff08;an axis of change&…

数独java界面基础_java版数独游戏界面实现(二)

本文实例为大家分享了java版数独游戏界面实现的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下实现效果图&#xff1a;这里写图片描述主函数用于启动程序&#xff1a;package hlc.shudu.app;import hlc.shudu.src.ShuduHelper;import hlc.shudu.ui.ShuduMainFrame;pu…

多国相继出台政策法规:为「自动驾驶」的「创新发展」保驾护航

来源&#xff1a;腾讯研究院曹建峰 腾讯研究院法律研究中心高级研究员祝林华 腾讯研究院法律研究中心助理研究员人工智能等新技术&#xff0c;正从科幻概念逐步落地到各行各业&#xff0c;将从重塑驾驶、医疗、制造等领域开始&#xff0c;全面重构人类社会和生活。自动驾驶汽…

测试替身之类型

测试桩Stub 桩&#xff1a;截断的或非常短的物体。 测试桩&#xff0c;用最简单的可能实现代替Real。 基本实现&#xff1a;所有方法仅一行&#xff0c;返回默认值。 public class LoggerStub implements Logger {public void log(LogLevel level, String message) {// still…

华为《5G业务商业价值评估》白皮书!

来源&#xff1a;5G蹇飒&#xff1a;华为公司商业与网络咨询部咨询专家。概要&#xff1a;在过去不长的时间里&#xff0c;5G技术不断取得重大进展&#xff0c;5G发展之路更为清晰。未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学…

java正则匹配的坑_java正则表达式入坑指南

在日常开发工作中&#xff0c;无论你使用的语言是java、python、shell、golang还是C#&#xff0c; 正则表达式是编程语言中几乎绕不开的话题。有了它&#xff0c;可以帮你快速定位到符合条件的文本内容。今天小编带大家一起来学习下正则表达式&#xff0c;相信通过这篇文章的介…

这有5种来自大自然「馈赠」的AI技术及其应用,你知道多少?

原文来源&#xff1a;Towards Data Science作者&#xff1a;Luke James「雷克世界」编译&#xff1a;KABUDA对于技术领域中存在的AI相关技术&#xff0c;我们应心存感恩。人类不仅花费了数十年的时间来研究完善数学算法&#xff0c;以使这些奇妙复杂的算法发挥效用&#xff0c;…

有效单元测试之可读性

断言 断言的基本原理和意图隐藏在无意义的单词和数字背后&#xff0c;难以理解&#xff0c;难以验证断言的正确性。 Bad eg. Test public void outputHasLineNumbers() {String content "1st match on #1\nand\n2nd match on #3";String out grep.grep("ma…

mysql 异步复制建立过程_mysql生产环境高可用---基于GTID异步复制项目实施

客户需求&#xff1a;客户需要上线一个门户网站&#xff0c;初期业务量非常小&#xff0c;数据量10个G&#xff0c;后台需要使用msyql 数据库&#xff0c;需要建设一个数据库环境项目技术&#xff1a;操作系统&#xff1a;两台linux系统 红帽6.5数据库版本&#xff1a;msyql 5.…

物联网定位技术超全解析!定位正在从室外走向室内~

来源&#xff1a;物联网智库概要&#xff1a;GPS和基站定位技术基本满足了用户在室外场景中对位置服务的需求。GPS和基站定位技术基本满足了用户在室外场景中对位置服务的需求。然而&#xff0c;人的一生当中有80%的时间是在室内度过的&#xff0c;个人用户、服务机器人、新型物…