简单了解Java断言利器AssertJ原理及用法
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的自定义断言器:
importjava.math.BigDecimal; importorg.assertj.core.api.AbstractAssert; importorg.assertj.core.api.AbstractBigDecimalAssert; importorg.assertj.core.api.AbstractBooleanAssert; importorg.assertj.core.api.AbstractCharSequenceAssert; importorg.assertj.core.api.AbstractIntegerAssert; importorg.assertj.core.api.Assertions; importcom.alibaba.fastjson.JSONObject; importcom.alibaba.fastjson.JSONPath; /** *assertJjson数据判断增强eg:不提供提取数组的方法,在断言中作用比较小 * *@authorjacksoncina2008 * */ publicclassAssertJSONextendsAbstractAssert{ protectedAssertJSON(Stringactual){ super(actual,AssertJSON.class); //TODOAuto-generatedconstructorstub } publicstaticAssertJSONassertThat(Stringjson){ returnnewAssertJSON(json); } /** *提取字符串节点 */ publicAbstractCharSequenceAssert,String>jsonPathAsString(Stringpath){ returnAssertions.assertThat((String)JSONPath.eval(getJSON(actual),path)); } /** *提取boolean节点 */ publicAbstractBooleanAssert>jsonPathAsBoolean(Stringpath){ returnAssertions.assertThat((boolean)JSONPath.eval(getJSON(actual),path)); } /** *提取数字节点 * */ publicAbstractIntegerAssert>jsonPathAsInteger(Stringpath){ returnAssertions.assertThat((Integer)JSONPath.eval(getJSON(actual),path)); } /** *提取小数 * */ publicAbstractBigDecimalAssert>jsonPathAsBigDecimal(Stringpath){ returnAssertions.assertThat((BigDecimal)JSONPath.eval(getJSON(actual),path)); } privateJSONObjectgetJSON(Stringjson){ JSONObjectj=newJSONObject(); j=JSONObject.parseObject(json); returnj; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。