JUnit4 Hamcrest匹配器常用方法總結(jié)
一.Hamcrest是什么?
Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests.
Hamcrest 是一個(gè)為了測試為目的,且能組合成靈活表達(dá)式的匹配器類庫。
二.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.
三.常用方法介紹
一般,在項(xiàng)目中導(dǎo)入hamcrest-core.jar, hamcrest-library.jar就能滿足使用。
Eclipse新建一個(gè)JUnit test case; 測試類導(dǎo)入
import static org.hamcrest.Matchers.*;
測試方法如下:
@Test
public void testHamcrestMatchers() {
// 核心匹配
// allOf: 所有條件都必須滿足,相當(dāng)于&&
assertThat("myname", allOf(startsWith("my"), containsString("name")));
// anyOf: 其中一個(gè)滿足就通過, 相當(dāng)于||
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: 每個(gè)元素都需滿足特定條件
assertThat(Arrays.asList("my", "mine"), everyItem(startsWith("m")));
// hasItem: 是否有這個(gè)元素
assertThat(Arrays.asList("my", "mine"), hasItem("my"));
// hasItems: 包含多個(gè)元素
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: 否為真,相當(dāng)于!
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: 比較時(shí),忽略大小寫
assertThat("myname", equalToIgnoringCase("MYNAME"));
// equalToIgnoringWhiteSpace: 比較時(shí), 首尾空格忽略, 比較時(shí)中間用單個(gè)空格
assertThat(" my t name ", equalToIgnoringWhiteSpace(" my name "));
// isOneOf: 是否為其中之一
assertThat("myname", isOneOf("myname", "yourname"));
// isIn: 是否為其成員
assertThat("myname", isIn(new String[]{
"myname", "yourname"
}
));
// toString() 返回值校驗(yàn)
assertThat(333, hasToString(equalTo("333")));
// 數(shù)值匹配
// 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: 數(shù)組長度相等且對(duì)應(yīng)元素也相等
assertThat(new Integer[]{
1, 2, 3
}
, is(array(equalTo(1), equalTo(2), equalTo(3))));
// hasItemInArray: 數(shù)組是否包含特定元素
assertThat(new String[]{
"my", "you"
}
, hasItemInArray(startsWith("y")));
// arrayContainingInAnyOrder, 順序無關(guān),長度要一致
assertThat(new String[]{
"my", "you"
}
, arrayContainingInAnyOrder("you", "my"));
// arrayContaining: 順序,長度一致
assertThat(new String[]{
"my", "you"
}
, arrayContaining("my", "you"));
// arrayWithSize: 數(shù)組長度
assertThat(new String[]{
"my", "you"
}
, arrayWithSize(2));
// emptyArray: 空數(shù)組
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")));
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)Token登錄驗(yàn)證的項(xiàng)目實(shí)踐
本文主要介紹了Java實(shí)現(xiàn)Token登錄驗(yàn)證的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
request.getRequestURL()等方法得到路徑的區(qū)別及說明
這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
阿里SpringBoot應(yīng)用自動(dòng)化部署實(shí)現(xiàn)IDEA版Jenkins
這篇文章主要為大家介紹了阿里SpringBoot應(yīng)用自動(dòng)化部署實(shí)現(xiàn)IDEA版Jenkins過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
詳解 問題:HttpServlet cannot be resolved to a type
這篇文章主要介紹了詳解 問題:HttpServlet cannot be resolved to a type的相關(guān)資料,需要的朋友可以參考下2017-03-03
Idea 2020.2 創(chuàng)建web、Spring項(xiàng)目的教程圖解
這篇文章主要介紹了Idea 2020.2 創(chuàng)建web、Spring項(xiàng)目的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

