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è)為了測(cè)試為目的,且能組合成靈活表達(dá)式的匹配器類庫(kù)。
二.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; 測(cè)試類導(dǎo)入
import static org.hamcrest.Matchers.*;
測(cè)試方法如下:
@Test public void testHamcrestMatchers() { // 核心匹配 // allOf: 所有條件都必須滿足,相當(dāng)于&& assertThat("myname", allOf(startsWith("my"), containsString("name"))); // anyOf: 其中一個(gè)滿足就通過(guò), 相當(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))的簡(jiǎn)寫 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ù)組長(zhǎng)度相等且對(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, 順序無(wú)關(guān),長(zhǎng)度要一致 assertThat(new String[]{ "my", "you" } , arrayContainingInAnyOrder("you", "my")); // arrayContaining: 順序,長(zhǎng)度一致 assertThat(new String[]{ "my", "you" } , arrayContaining("my", "you")); // arrayWithSize: 數(shù)組長(zhǎng)度 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"))); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解
這篇文章主要為大家介紹了java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09自己動(dòng)手編寫一個(gè)Mybatis插件之Mybatis脫敏插件
這篇文章主要介紹了自己動(dòng)手編寫一個(gè)Mybatis插件之Mybatis脫敏插件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)
這篇文章主要介紹了解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java正則表達(dá)式判斷是否包含數(shù)字、字母、特殊字符及中文的多種方法
這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式判斷是否包含數(shù)字、字母、特殊字符及中文的多種方法,Java正則表達(dá)式在字符串處理和模式匹配中扮演著重要角色,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08