1. 程式人生 > 程式設計 >JUnit4 Hamcrest匹配器常用方法總結

JUnit4 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.*;

測試方法如下:

@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")));
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。