简单了解Java断言利器AssertJ原理及用法
作者:shuzihua 发布时间:2022-07-12 15:54:21
标签: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的自定义断言器:
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;
}
}
来源:https://www.cnblogs.com/xinxihua/p/13899723.html


猜你喜欢
- Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需
- 嵌入式Servlet容器在Spring Boot中,默认支持的web容器有 Tomcat, Jetty, 和 Undertow1、原理分析那
- 开始学习WebSocket,准备用它来实现一个在页面实时输出log4j的日志以及控制台的日志。首先知道一些基础信息:1.java7 开始支持
- synchronized关键字,一般称之为”同步锁“,用它来修饰需要同步的方法和需要同步代码块,默认是当前对象作为锁的对象。同步锁锁的是同一
- 如下所示:package java.util;public interface Enumeration<E> { boolean
- 用微信提供的SDK来实现分享:从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.j
- 全面解析java注解Java中的常见注解 a.JDK中的注解 @Override 覆盖父类或者父接口的方
- 在学习C#语言的时候,首先要学习控制台的应用程序,这样才能专注于语言的学习,减少学习的梯度,也有利于输出自己需要输出的内容。因此第一步学习C
- 之前看到过一个数字进度条,一直想写,今天就把这个实现下,想起来也是很简单的,先看下实现的效果:思路:绘制2根线 绘制进度条的文字,不断的改变
- 一、前言目前大部分手机都是 60Hz 的刷新率,也就是 16.6ms 刷新一次,系统为了配合屏幕的刷新频率,将 Vsync 的周期也设置为
- 引言之前写了一篇关于 TraceId 的文章:为全局请求添加 TraceId ,看日志再也不懵逼今天就接着 TraceId 做一些优化,如果
- 在使用手机时,当有未接来电或者新短消息时,手机会给出响应的提示信息,这些提示信息通常会显示到手机屏幕的状态栏上。Android也提供了用于处
- 下面是一个邮件接收的工具类,有点长!!!public class ReciveMail { private MimeMessage msg
- 话不多说,请看代码:public Map<String, Object> getWeeklyBySearch(final Map
- 一、定界符成帧Framer接口package framer;import java.io.IOException;import java.i
- 本文实例为大家分享了SpringBoot +Mail+FreeMarker发送邮件,供大家参考,具体内容如下通过spirngboot 自带的
- 开发前准备1、密钥工具在线工具地址:https://miniu.alipay.com/keytool/create无需下载,直接在线生成你的
- 本文实例为大家分享了C语言实现五子棋游戏的具体代码,供大家参考,具体内容如下一、实现的目的和意义1、巩固和加深对c语言知识的理解2、学会使用
- Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给
- 话不多说,下面来直接看示例代码具体代码:DayOfWeek4Birthday.javapackage com.gua;import java