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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Hamcrest学习

發布時間:2023/12/20 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Hamcrest学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 概述

在Java生態中,Hamcrest是一個用在單元測試中的框架。該框架與JUnit集成。

Java中使用JUnit進行單元測試。JUnit提供了若干斷言工具。 如assertEquals、assertTrue等。此外我們還可以通過擴展能力來增強assert*的表達。這時我們使用

assertThat
public static void assertThat(T actual,Matcher<? super T> matcher)

通過指定不同的matcher,來判斷actual對象是否滿足驗證條件。例如驗證0不是1,下面的表達的更清晰易懂。

assertThat(“Zero is one”, 0, is(not(1))) // passes

我們可以自己去實現matcher。但Hamcrest這個框架已給我們實現了很多常用的matcher,從而簡化我們的使用。

2 依賴

Junit 4.8.2 已經內部集成了hamcrest,所以不需要添加額外依賴。但提供的工具有限。此外可以引入all包,使用更多的工具。

<dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId><version>1.3</version> </dependency>

3 第一個樣例

public class StringMatcherTest {@Testpublic void given2Strings_whenEqual_thenCorrect() {String a = "foo";String b = "FOO";assertThat(a, equalToIgnoringCase(b));} }

從語義表達上,顯然使用hamcrest提供的matcher含義更清晰。接下來我們將看幾種matcher。

4 Object Matcher

如果要驗證任意的Java對象我們可以使用Object Matcher。例如驗證對象的toString方法是否等于某個值。此外也可以驗證一個類是否是另一個類的子類

@Test public void givenBean_whenToStringReturnsRequiredString_thenCorrect(){Person person=new Person("Barrack", "Washington");String str=person.toString();assertThat(person,hasToString(str)); }@Test public void given2Classes_whenOneInheritsFromOther_thenCorrect(){assertThat(Cat.class,typeCompatibleWith(Animal.class));} }

5 Bean Matcher

我們可以通過bean matcher來檢查java bean的屬性

public class Person {String name;String address;public Person(String personName, String personAddress) {name = personName;address = personAddress;} }// 檢查是否有屬性name@Test public void givenBean_whenHasValue_thenCorrect() {Person person = new Person("Baeldung", 25);assertThat(person, hasProperty("name")); }// 檢查地址屬性address等于New York@Test public void givenBean_whenHasCorrectValue_thenCorrect() {Person person = new Person("Baeldung", "New York");assertThat(person, hasProperty("address", equalTo("New York"))); }// 檢查兩個Person對象是否有相同值@Test public void given2Beans_whenHavingSameValues_thenCorrect() {Person person1 = new Person("Baeldung", "New York");Person person2 = new Person("Baeldung", "New York");assertThat(person1, samePropertyValuesAs(person2)); }

6 Collection Matcher

collection Matcher可以用來驗證集合

驗證集合是否為空@Test public void givenCollection_whenEmpty_thenCorrect() {List<String> emptyList = new ArrayList<>();assertThat(emptyList, empty()); }驗證集合大小 @Test public void givenAList_whenChecksSize_thenCorrect() {List<String> hamcrestMatchers = Arrays.asList("collections", "beans", "text", "number");assertThat(hamcrestMatchers, hasSize(4)); }檢查是否包含指定元素,而不關注順序@Test public void givenAListAndValues_whenChecksListForGivenValues_thenCorrect() {List<String> hamcrestMatchers = Arrays.asList("collections", "beans", "text", "number");assertThat(hamcrestMatchers,containsInAnyOrder("beans", "text", "collections", "number")); }驗證包含元素且順序正確 @Test public void givenAListAndValues_whenChecksListForGivenValuesWithOrder_thenCorrect() {List<String> hamcrestMatchers = Arrays.asList("collections", "beans", "text", "number");assertThat(hamcrestMatchers,contains("collections", "beans", "text", "number")); }檢查一個數組是否含有指定元素 @Test public void givenArrayAndValue_whenValueFoundInArray_thenCorrect() {String[] hamcrestMatchers = { "collections", "beans", "text", "number" };assertThat(hamcrestMatchers, hasItemInArray("text")); }

7 Number Matcher

Number matcher用來指定進行數值驗證

驗證1大于0 @Test public void givenAnInteger_whenGreaterThan0_thenCorrect() {assertThat(1, greaterThan(0)); }小于等于驗證 @Test public void givenAnInteger_whenLessThanOrEqTo5_thenCorrect() {assertThat(-1, lessThanOrEqualTo(5)); }

8 Text Matcher

Text Matcher 字符串驗證

是否是空字符串 @Test public void givenString_whenEmpty_thenCorrect() {String str = "";assertThat(str, isEmptyString()); }是否含有空包符 @Test public void given2Strings_whenEqualRegardlessWhiteSpace_thenCorrect() {String str1 = "text";String str2 = " text ";assertThat(str1, equalToIgnoringWhiteSpace(str2)); }

9 Core API

Hamcrest core API 提供了一些很優雅的工具類,使得我們的單元測試可讀性更好。
此外還有一些核心matcher簡化我們的使用。

使用is @Test public void given2Strings_whenIsEqualRegardlessWhiteSpace_thenCorrect() {String str1 = "text";String str2 = " text ";assertThat(str1, is(equalToIgnoringWhiteSpace(str2))); }使用not @Test public void given2Strings_whenIsNotEqualRegardlessWhiteSpace_thenCorrect() {String str1 = "text";String str2 = " texts ";assertThat(str1, not(equalToIgnoringWhiteSpace(str2))); }驗證兩個類是否是一個實例 @Test public void given2Objects_whenSameInstance_thenCorrect() {Cat cat=new Cat();assertThat(cat, sameInstance(cat)); }

10 自定義Matcher

除了使用框架提供的matcher,我們還可以自定義matcher。我們自定義類繼承TypeSafeMatcher類并實現對應的方法即可。

public class IsPositiveInteger extends TypeSafeMatcher<Integer> {public void describeTo(Description description) {description.appendText("a positive integer");}@Factorypublic static Matcher<Integer> isAPositiveInteger() {return new IsPositiveInteger();}@Overrideprotected boolean matchesSafely(Integer integer) {return integer > 0;}}

11 總結

閱讀完原文,重點是理解Hamcrest是什么,用來解決什么問題,整個過程就很好理解了。其次通過框架提供的幾個matcher介紹基本使用。最后學習自定義matcher的用法。

參考

[1].https://www.baeldung.com/java-junit-hamcrest-guide
[2].http://tutorials.jenkov.com/java-unit-testing/matchers.html
[3].http://hamcrest.org/JavaHamcrest/tutorial

總結

以上是生活随笔為你收集整理的Java Hamcrest学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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