一.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.*; 測試方法如下:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;/*** Hamcrest演示.<br>* @author gongqiang <br>* @version 1.0.0 2021年6月16日<br>* @see * @since JDK 1.5.0*/
public class HamcrestDemo {/*** 核心匹配.*/@Testpublic void coreMatcher() {// 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("myname", is(equalTo("myname")));//assertThat("mynmae", is(String.class));assertThat("mynmae", is(instanceOf(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()));}/*** 字符串匹配.*/@Testpublic void stringMatcher() {// 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"));// emptyString(): 空字符串assertThat("", emptyString());// equalTo: 值相等, Object.equals(Object)assertThat("myname", equalTo("myname"));assertThat(new String[] {"a", "b"}, equalTo(new String[] {"a", "b"}));// equalToIgnoringCase: 比較時,忽略大小寫assertThat("myname", equalToIgnoringCase("MYNAME"));// equalToCompressingWhiteSpace: 比較時, 首尾空格忽略, 比較時中間用單個空格assertThat(" my \t name ", equalToCompressingWhiteSpace(" my name "));// oneOf: 是否為其中之一assertThat("myname", oneOf("myname", "yourname"));// in: 是否為其成員assertThat("myname", in(new String[]{"myname", "yourname"}));// toString() 返回值校驗assertThat(333, hasToString(equalTo("333")));}/*** 數值匹配.*/@Testpublic void numberMatcher() {// 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));}/*** 集合匹配*/@Testpublic void collectionMatcher() {// 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", "you"}, arrayContainingInAnyOrder("you", "my"));// arrayContaining: 順序,長度一致assertThat(new String[]{"my", "you"}, arrayContaining("my", "you"));// arrayWithSize: 數組長度assertThat(new String[]{"my", "you"}, arrayWithSize(2));// emptyArray: 空數組assertThat(new String[0], emptyArray());// hasSize: 集合大小assertThat(Arrays.asList("my", "you"), hasSize(equalTo(2)));// empty: 空集合assertThat(new ArrayList<String>(), empty());assertThat(new ArrayList<String>(), is(empty()));// in: 是否為集合成員assertThat("myname", in(Arrays.asList("myname", "yourname")));assertThat("myname", is(in(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")));}
}
原文鏈接:https://blog.csdn.net/neven7/article/details/42489723
總結
以上是生活随笔 為你收集整理的Hamcrest匹配器常用方法总结 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。