JUnit4 Hamcrest匹配器常用方法總結
阿新 • • 發佈:2020-11-08
一.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.*;
測試方法如下:
@Test public void testHamcrestMatchers() { // 核心匹配 // 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",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(): 值為空 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: 比較時,忽略大小寫 assertThat("myname",equalToIgnoringCase("MYNAME")); // equalToIgnoringWhiteSpace: 比較時, 首尾空格忽略, 比較時中間用單個空格 assertThat(" my t name ",equalToIgnoringWhiteSpace(" my name ")); // isOneOf: 是否為其中之一 assertThat("myname",isOneOf("myname","yourname")); // isIn: 是否為其成員 assertThat("myname",isIn(new String[]{ "myname","yourname" } )); // toString() 返回值校驗 assertThat(333,hasToString(equalTo("333"))); // 數值匹配 // 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: 陣列長度相等且對應元素也相等 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",arrayContainingInAnyOrder("you","my")); // arrayContaining: 順序,長度一致 assertThat(new String[]{ "my",arrayContaining("my","you")); // arrayWithSize: 陣列長度 assertThat(new String[]{ "my",arrayWithSize(2)); // emptyArray: 空陣列 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"))); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。