JUnit4 Hamcrest匹配器常用方法总结
一.Hamcrest是什么?
Hamcrestisalibraryofmatchers,whichcanbecombinedintocreateflexibleexpressionsofintentintests.
Hamcrest是一个为了测试为目的,且能组合成灵活表达式的匹配器类库。
二.Hamcrestjar包
- hamcrest-core.jar--ThisisthecoreAPItobeusedbythird-partyframeworkproviders.Thisincludestheafoundationsetofmatcherimplementationsforcommonoperations.ThisAPIisstableandwillrarelychange.Youwillneedthislibraryasaminimum.
- hamcrest-library.jar--Theever-growinglibraryofMatcherimplementations.Thiswillgrowbetweenreleases.
- hamcrest-generator.jar--AtooltoallowmanyMatcherimplementationstobecombinedintoasingleclasssousersdon'thavetoremembermanyclasses/packagestoimport.Generatescode.
- hamcrest-integration.jar--ProvidesintegrationbetweenHamcrestandothertestingtools,includingJUnit(3and4),TestNG,jMockandEasyMock.
Alternatively,ifyoudon'tcare:
hamcrest-all.jar--Includesalloftheabove.
三.常用方法介绍
一般,在项目中导入hamcrest-core.jar,hamcrest-library.jar就能满足使用。
Eclipse新建一个JUnittestcase;测试类导入
importstaticorg.hamcrest.Matchers.*;
测试方法如下:
@Test
publicvoidtestHamcrestMatchers(){
//核心匹配
//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():值为空
Stringstr=null;
assertThat(str,is(nullValue()));
//notNullValue():值不为空
Stringstr2="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(newString[]{
"a","b"
}
,equalTo(newString[]{
"a","b"
}
));
//equalToIgnoringCase:比较时,忽略大小写
assertThat("myname",equalToIgnoringCase("MYNAME"));
//equalToIgnoringWhiteSpace:比较时,首尾空格忽略,比较时中间用单个空格
assertThat("mytname",equalToIgnoringWhiteSpace("myname"));
//isOneOf:是否为其中之一
assertThat("myname",isOneOf("myname","yourname"));
//isIn:是否为其成员
assertThat("myname",isIn(newString[]{
"myname","yourname"
}
));
//toString()返回值校验
assertThat(333,hasToString(equalTo("333")));
//数值匹配
//closeTo:[operand-error,operand+error],Double或BigDecimal类型
assertThat(3.14,closeTo(3,0.5));
assertThat(newBigDecimal("3.14"),is(closeTo(newBigDecimal("3"),newBigDecimal("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(newInteger[]{
1,2,3
}
,is(array(equalTo(1),equalTo(2),equalTo(3))));
//hasItemInArray:数组是否包含特定元素
assertThat(newString[]{
"my","you"
}
,hasItemInArray(startsWith("y")));
//arrayContainingInAnyOrder,顺序无关,长度要一致
assertThat(newString[]{
"my","you"
}
,arrayContainingInAnyOrder("you","my"));
//arrayContaining:顺序,长度一致
assertThat(newString[]{
"my","you"
}
,arrayContaining("my","you"));
//arrayWithSize:数组长度
assertThat(newString[]{
"my","you"
}
,arrayWithSize(2));
//emptyArray:空数组
assertThat(newString[0],emptyArray());
//hasSize:集合大小
assertThat(Arrays.asList("my","you"),hasSize(equalTo(2)));
//empty:空集合
assertThat(newArrayList(),is(empty()));
//isIn:是否为集合成员
assertThat("myname",isIn(Arrays.asList("myname","yourname")));
//Map匹配
MapmyMap=newHashMap();
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")));
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。