簡單瞭解Java斷言利器AssertJ原理及用法
阿新 • • 發佈:2020-11-06
AssertJ是我目前見過的最強大的斷言api,沒有之一。
官網傳送門
為什麼使用assertJ?
1、流式斷言,程式碼即用例,直觀易懂。
舉個例子:
傳統的junit或者testng,判斷一個字串包不包括a跟b兩個字元。要這麼寫
assertTrue(stringbuffer.contains("a") && stringbuffer.contains("b"))
而如果你用的assertJ
assertThat(stringbuffer).contains("a").contains("b").as("判斷字串是否包括a|b")
相比之下,顯然後者更加容易理解。而且as的註釋更是讓斷言清晰
2、方便定製的斷言器
試想一下。當你在做介面測試的時候,還在到處寫著
JSONPath.eval(JSONObject.parse(String),"$yourpath").tostring.equals(expectString)
你的介面自動化裡邊。到處都是這些看都不想看的json解析,判斷。然而,當你有了assertJ,你可以自定義你的斷言,儘可能的簡化你的測試程式碼,可讀性將能幾何倍數提升。下邊是我自己寫的一個針對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資料判斷增強 eg:不提供提取陣列的方法,在斷言中作用比較小 * * @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); } /** * 提取字串節點 */ public AbstractCharSequenceAssert<?,String> jsonPathAsString(String path) { return Assertions.assertThat((String) JSONPath.eval(getJSON(actual),path)); } /** * 提取boolean節點 */ public AbstractBooleanAssert<?> jsonPathAsBoolean(String path) { return Assertions.assertThat((boolean) JSONPath.eval(getJSON(actual),path)); } /** * 提取數字節點 * */ public AbstractIntegerAssert<?> jsonPathAsInteger(String path) { return Assertions.assertThat((Integer) JSONPath.eval(getJSON(actual),path)); } /** * 提取小數 * */ 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; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。