日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hamcrest详细介绍

發布時間:2024/4/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hamcrest详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用過Junit 的應該有過體驗:在實際開發中,一些基本的斷言,如eqaul,null,true它們的可讀性并不是很好。而且很多時候我們要比較對象、集合、Map等數據結構。這樣我們要么進行大段的字段獲取再斷言。或者干脆自己編寫表達式并斷言其結果。
JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,這些匹配符更接近自然語言,可讀性高,更加靈活。

Hamcrest 提供了大量被稱為“匹配器”的方法。其中每個匹配器都設計用于執行特定的比較操作。Hamcrest的可擴展性很好,讓你能夠創建自定義的匹配器。最重要的是,JUnit也包含了Hamcrest的核心,提供了對Hamcrest的原生支持,可以直接使用Hamcrest。

類圖



類實現

hamcrest架構中,主要實現匹配器(Matcher),因此Matcher作為頂層類型。

Matcher

public interface Matcher<T> extends SelfDescribing {//驗證對象是否匹配。此處用Object,因為在運行時不知道是什么類型,由實現類決定boolean matches(Object item);//**構造不匹配的緣由。**void describeMismatch(Object item, Description mismatchDescription); }

BaseMatcher

BaseMatcher作為所有匹配器的基類,不建議直接實現Matcher接口。

public abstract class BaseMatcher<T> implements Matcher<T> {@Overridepublic void describeMismatch(Object item, Description description) {description.appendText("was ").appendValue(item);}@Overridepublic String toString() {return StringDescription.toString(this);} }

具體匹配器

名稱用途說明
CustomMatcher僅用于作為匿名內部類的父類
DescribedAs為其他Matcher提供一個Description
AllOf判斷多個Mathcer是否同時true。短路方式
IsInstanceOf判斷是否是指定class的實例
PropertyMatcher判斷屬性值是否匹配
Is裝飾一個其他Matcher
IsAnythingalways return true
IsEmptyString判斷不為空字符串
IsEqual判斷是否equal
IsIn是否是集合元素
IsNot裝飾一個其他Matcher,判斷Matcher不匹配
IsNull判斷對象是否為null
IsSame判斷對象是同一個
AnyOf判斷多個Mathcer是否有一個true。短路方式
TypeSafeMatcher類型安全匹配器。把一個類方便的轉化為一個Matcher
TypeSafeDiagnosingMatcher類型安全診斷匹配器。把一個類方便的轉化為一個Matcher,并報告為什么不匹配。

類型安全匹配器

名稱用途說明
BigDecimalCloseTo是否近似某個值
HasProperty是否有屬性
IsArray集合是否一一匹配一組Matcher
IsArrayContaining集合是否有一個元素匹配
IsCloseTo是否近似某個值
IsCompatibleType一個類是否是另一個類的子類
IsEmptyCollection是否是一個空集合
IsEmptyIterable迭代是否是空的
IsEqualIgnoringCase是否相同,忽略大小寫
IsEqualIgnoringWhiteSpace是否相同,忽略空白
IsMapContaining<K,V>Map是否有一個元素匹配
OrderingComparison<T extends Comparable>大小比較
StringContainsInOrderString集合是否都以…開頭
SubstringMatcher子串匹配
ThrowableMessageMatcher異常信息匹配

ReflectiveTypeFinder

此類找到某個類包含某個方法的superclass,從下往上查找。

類型安全診斷匹配器

名稱用途說明
CombinableMatcher組合匹配器and,or,
Every每個元素都匹配
HasPropertyWithValue屬性值匹配
HasXPathxml匹配
IsCollectionContaining有集合元素匹配
IsEventFrom事件源是同一個對象
SamePropertyValuesAs
IsIterableContainingInAnyOrder
IsIterableContainingInOrder
FeatureMatcher<T, U>

Dsecription

描述不匹配情況的類。每個Matcher描述自己的匹配情況。

NullDescription

丟棄信息

BaseDescription

基礎Description,存儲為字符串

StringDescription

繼承于BaseDescription。存儲為String。

Sample

public class Person {String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(String name){this.name =name;} } public class HamcrestTest {public static void main(String[] args){Person person = new Person("tom");//IsAnything<Person> anything = new IsAnything<>();boolean matched = anything.matches(person);System.out.println("anything:" + matched);IsEmptyString isEmptyString = new IsEmptyString();matched = isEmptyString.matches("555");System.out.println("isEmptyString:" + matched);IsEqual<Person> isEqual = new IsEqual<Person>(person);matched = isEqual.matches(person);System.out.println("isEqual:" + matched);IsNull<Person> isNull = new IsNull<>();matched = isNull.matches(person);System.out.println("isNull:" + matched);IsSame<Person> isSame = new IsSame<Person>(person);matched = isSame.matches(person);System.out.println("isEqual:" + matched);Is<Person> is = new Is<>(isEqual);matched = is.matches(person);System.out.println("is:" + matched);IsNot<Person> isNot = new IsNot<>(isEqual);matched = isNot.matches(person);System.out.println("isNot:" + matched);IsInstanceOf isInstanceOf = new IsInstanceOf(person.getClass());matched = isInstanceOf.matches(person);System.out.println("isInstanceOf:" + matched);List<Matcher<? super Person>> matchers = new ArrayList<>();matchers.add(is);matchers.add(isSame);AllOf<Person> allOf = new AllOf<Person>(matchers);matched = allOf.matches(person);System.out.println("allOf:" + matched);AnyOf<Person> anyOf = new AnyOf<Person>(matchers);matched = anyOf.matches(person);System.out.println("anyOf:" + matched);HasProperty<Person> hasProperty = new HasProperty<>("name");matched = hasProperty.matches(person);System.out.println("hasProperty:" + matched);HasPropertyWithValue<Person> hasPropertyWithValue = new HasPropertyWithValue<Person>("name",new IsEqual<String>("tom"));matched = hasPropertyWithValue.matches(person);System.out.println("hasPropertyWithValue:" + matched);} }

結果:

anything:true isEmptyString:false isEqual:true isNull:false isEqual:true is:true isNot:false isInstanceOf:true allOf:true anyOf:true hasProperty:true hasPropertyWithValue:true

注意:與屬性有關的Matcher,必須保證測試類是public的,方法是public的。

總結

以上是生活随笔為你收集整理的hamcrest详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。