簡(jiǎn)單了解Java斷言利器AssertJ原理及用法
AssertJ是我目前見過(guò)的最強(qiáng)大的斷言api,沒(méi)有之一。
為什么使用assertJ?
1、流式斷言,代碼即用例,直觀易懂。
舉個(gè)例子:
傳統(tǒng)的junit或者testng,判斷一個(gè)字符串包不包括a跟b兩個(gè)字符。要這么寫
assertTrue(stringbuffer.contains("a") && stringbuffer.contains("b"))
而如果你用的assertJ
assertThat(stringbuffer).contains("a").contains("b").as("判斷字符串是否包括a|b")
相比之下,顯然后者更加容易理解。而且as的注釋更是讓斷言清晰
2、方便定制的斷言器
試想一下。當(dāng)你在做接口測(cè)試的時(shí)候,還在到處寫著
JSONPath.eval(JSONObject.parse(String),"$yourpath").tostring.equals(expectString)
你的接口自動(dòng)化里邊。到處都是這些看都不想看的json解析,判斷。然而,當(dāng)你有了assertJ,你可以自定義你的斷言,盡可能的簡(jiǎn)化你的測(cè)試代碼,可讀性將能幾何倍數(shù)提升。下邊是我自己寫的一個(gè)針對(duì)json的自定義斷言器:
import java.math.BigDecimal; import org.assertj.core.api.AbstractAssert; import org.assertj.core.api.AbstractBigDecimalAssert; import org.assertj.core.api.AbstractBooleanAssert; import org.assertj.core.api.AbstractCharSequenceAssert; import org.assertj.core.api.AbstractIntegerAssert; import org.assertj.core.api.Assertions; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPath; /** * assertJ json數(shù)據(jù)判斷增強(qiáng) eg:不提供提取數(shù)組的方法,在斷言中作用比較小 * * @author jacksoncina2008 * */ public class AssertJSON extends AbstractAssert<AssertJSON, String> { protected AssertJSON(String actual) { super(actual, AssertJSON.class); // TODO Auto-generated constructor stub } public static AssertJSON assertThat(String json) { return new AssertJSON(json); } /** * 提取字符串節(jié)點(diǎn) */ public AbstractCharSequenceAssert<?, String> jsonPathAsString(String path) { return Assertions.assertThat((String) JSONPath.eval(getJSON(actual), path)); } /** * 提取boolean節(jié)點(diǎn) */ public AbstractBooleanAssert<?> jsonPathAsBoolean(String path) { return Assertions.assertThat((boolean) JSONPath.eval(getJSON(actual), path)); } /** * 提取數(shù)字節(jié)點(diǎn) * */ public AbstractIntegerAssert<?> jsonPathAsInteger(String path) { return Assertions.assertThat((Integer) JSONPath.eval(getJSON(actual), path)); } /** * 提取小數(shù) * */ public AbstractBigDecimalAssert<?> jsonPathAsBigDecimal(String path) { return Assertions.assertThat((BigDecimal) JSONPath.eval(getJSON(actual), path)); } private JSONObject getJSON(String json) { JSONObject j = new JSONObject(); j = JSONObject.parseObject(json); return j; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JPA @GeneratedValue 四種標(biāo)準(zhǔn)用法TABLE,SEQUENCE,IDENTITY,
這篇文章主要介紹了@GeneratedValue 四種標(biāo)準(zhǔn)用法TABLE,SEQUENCE,IDENTITY,AUTO詳解,需要的朋友可以參考下2024-03-03SpringBoot整合Redis實(shí)現(xiàn)訪問(wèn)量統(tǒng)計(jì)的示例代碼
本文主要介紹了SpringBoot整合Redis實(shí)現(xiàn)訪問(wèn)量統(tǒng)計(jì)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的操作代碼
本文通過(guò)實(shí)例代碼給大家介紹新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-12-12java數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)雙向鏈表的示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表的示例,需要的朋友可以參考下2014-03-03Java中HashTable和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來(lái)通過(guò)本文給大家簡(jiǎn)單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧2017-04-04IDEA下SpringBoot指定環(huán)境、配置文件啟動(dòng)操作過(guò)程
這篇文章主要介紹了IDEA下SpringBoot指定環(huán)境、配置文件啟動(dòng)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08spring AOP的After增強(qiáng)實(shí)現(xiàn)方法實(shí)例分析
這篇文章主要介紹了spring AOP的After增強(qiáng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了spring面向切面AOP的After增強(qiáng)實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-01-01