【业务功能篇29】Assert断言

news2024/12/19 23:51:02

业务场景: 当我们需要对一个接口方法验证是,在单元测试中,主要用于程序代码的调试或测试阶段

基本的使用就是assert condition,当 condition 为 true,就继续往下运行;当 condition 为 false,就抛出一个错误,程序停止。

  •  注意断言抛出的是错误,我们是无法使用 try{}catch(){}捕捉的。
  • 限定某段代码中某个变量的合理范围,一旦不符合就抛出错误,需要让程序员再修改代码。表达式结果等同理。

简单记录下 今天用到的这个断言,主要是判断了一个对象是否为空,业务逻辑上是需要这个对象值不能为空的,单元测试简单做了下验证

 

 

断言常用的方法 

  • notNull(Object object) 当 object 不为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
  •  isTrue(boolean expression) / isTrue(boolean expression, String message) 当 expression 不为 true 抛出异常;
  • notEmpty(Collection collection) / notEmpty(Collection collection, String message) 当集合未包含元素时抛出异常。notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;
  • hasLength(String text) / hasLength(String text, String message)  当 text 为 null 或长度为 0 时抛出异常;
  •  hasText(String text) / hasText(String text, String message)  text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
  • isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message)  如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
  • isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message)  subType 必须可以按类型匹配于 superType,否则将抛出异常;
     
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
 
 
public class Test {
    private final static Logger logger = LoggerFactory.getLogger(Test.class);
 
    public static void main(String[] args) {
        Test test = new Test();
        test.f1();
    }
 
    public void f1() {
        try {
//            String s1 = null;//hasText,notNull,hasLength均报异常
//            String s1 = "";//hasText报异常,notNull不报异常,hasLength报异常
//            String s1 = " ";//一个空格,hasText报异常,notNull不报异常,hasLength不报异常
//            String s1 = "   ";//三个空格,hasText报异常,notNull不报异常,hasLength不报异常
            String s1 = "s";//hasText,notNull,hasLength均不报异常
            Assert.hasText(s1, "hasText,s1不能为空,当前为空已抛出异常");
            Assert.notNull(s1, "notNull,s1不能为空,当前为空已抛出异常");
            Assert.hasLength(s1, "hasLength,s1不能为空,当前为空已抛出异常");
 
            Assert.isTrue(1 < 2, "1<2需要为true");//不报异常
            Assert.isTrue(1 > 2, "1<2需要为true");//报异常
 
            Assert.isInstanceOf(String.class,s1);//不报异常
            Assert.isInstanceOf(Object.class,s1);//不报异常
            Assert.isInstanceOf(Integer.class,s1);//报异常
 
            Assert.isAssignable(String.class,s1.getClass(),"s1需要是String类型的子类");//不报异常
            Assert.isAssignable(String.class,new Integer(1).getClass(),"s1需要是String类型的子类");//报异常
            Assert.isAssignable(Object.class,s1.getClass(),"s1需要是Object类型的子类");//不报异常
            Assert.isAssignable(String.class,new Object().getClass(),"subType需要是superType的子类");//报异常
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        logger.info("运行正常");
    }
}
 
//Assert.notNull:只有输入空,才会报异常;输入空字符比如""、空格不报异常;
//Assert.hasLength:如果输入空、空字符报异常;输入空格不报异常;
//Assert.hasText:只有输入空、空字符比如""、空格或多个空格都会报异常;(不把空格算作内容)
//校验的越来越严格

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL - 第2节 - MySQL库的操作

1.创建数据库 创建数据库的SQL如下&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSETcharset_name] [[DEFAULT] COLLATEcollation_name];说明&#xff1a; • SQL中大写的表示关键字&#xff0c;[ ]中代表的是可选项。 • CHARSET用于指定数据库所采用…

「实在RPA·证券数字员工」革新证券数字化现状

2022年1月《金融科技发展规划&#xff08;2022——2025年&#xff09;》提出“十四五”时期金融科技发展愿景&#xff0c;明确了金融科技发展的指导思想和4个基本原则、6个发展目标&#xff0c;确定了8项重点任务和5项保障措施&#xff0c;进一步明确金融科技发展方向。近年来&…

ADB WIFI 链接

ADB WiFi链接手机 必须在同一网络下&#xff08;本人用的台式机网线手机连路由器WIFI&#xff09; 1.先确认USB数据线是否成功链接了手机 adb devices不管前面设备是什么名字&#xff0c;但是后面必须为device状态才算链接成功了&#xff0c;offline状态是不行的 有些没开启…

Linux Debian Jenkins快速搭建配置并运行

Jenkins安装 参考Debian Jenkins Packageshttps://pkg.origin.jenkins.io/debian-stable/ 加Key curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \/usr/share/keyrings/jenkins-keyring.asc > /dev/null 加仓库 echo deb [signed-by/u…

什么是远程工具,远程工具推荐

在当今数字化时代&#xff0c;远程工作正在变得越来越普遍。这种趋势不仅使企业管理更加便利&#xff0c;节省了时间和资源&#xff0c;同时也使员工更加自由和灵活。许多远程工作都需要使用到远程工具。本文将对远程工具进行简介和阐述。 什么是远程工具 远程工具是一种数字…

类与对象知识总结+封闭类+const+this指针 C++程序设计与算法笔记总结(三) 北京大学 郭炜

//C程序到C程序的翻译 class CCar { public: int price; void SetPrice(int p); }; void CCar::SetPrice(int p) { price p; } int main() { CCar car; car.SetPrice(20000); return 0; }struct CCar { int price; }; void SetPrice(struct CCar * this, int p) { this-&g…

【ROS】URDF:统一机器人描述格式(XML)

1、简述 统一机器人描述格式&#xff08;URDF&#xff09;是描述机器人模型的 XML 文件&#xff0c;支持Xacro&#xff08;XML宏&#xff09;&#xff0c;使用Xacro来引用已经存在的XML块&#xff0c;创建更短且可读的XML文件。 2、初始URDF描述文件 URDF描述文件为XML格式&…

测试左移-快速玩转Debug

目录 背 景 学习的意义 玩 转 Debug 一、基本介绍 二、断点设置 三、启动调试 四、调试技巧 定 位 问 题 总 结 背 景 一段代码的问题产生阶段可以分为&#xff1a;编译期和运行时 编译期的代码可以由工具&#xff08;idea、eclipse&#xff09;在程序编码过程中提示错误…

面对对象。

1.类&#xff1a; 类&#xff1a;是对象共同特征的描述。 对象&#xff1a;是真实存在的具体实例。 先设计类&#xff0c;才能创建对象并使用。 pulic class 类名{1.成员变量&#xff08;代表属性&#xff0c;一般是名词&#xff09;2.成员方法&#xff08;代表行为&#x…

达梦主备守护集群相关概念和基本原理介绍

DM数据守护一主一备或一主多备是一种集成化的高可用、高性能数据库解决方案&#xff0c;是数据库异地容灾的首选方案。通过部署 DM 数据守护&#xff0c;可以在硬件故障&#xff08;如磁盘损坏&#xff09;、自然灾害&#xff08;地震、火灾&#xff09;等极端情况下&#xff0…

思科交换机与路由器基础命令(一)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Cisco交换机的命令行模式&#xff1a; 1、用户模式 2、 特权模式 3、 全局配置模式 4、 接口模式 5、退回命令 二、帮助机制 …

20. 算法之回溯算法

1. 概念 回溯算法实际上一个类似枚举的深度优先搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff08;也就是递归返回&#xff09;&#xff0c;尝试别的路径。 回溯的处理思想&#xff0c…

必备:音乐的魅力,一边听歌一边练习英语!

音乐是一种跨越语言和文化的艺术形式&#xff0c;能够带给我们无限的感动和快乐。下面是我推荐的一些好听的英文歌曲&#xff0c;希望大家喜欢。 这首歌是英国歌手Ed Sheeran的代表作之一&#xff0c;曲调轻快&#xff0c;旋律优美&#xff0c;歌词简单易懂&#xff0c;非常容…

搞懂mysql事物隔离级别

事物是为交易而生 事物的英文单词 TRANSACTION,就是交易的意思. 交易和事物是一个东西. mysql的事物的4种隔离级别 mysql的事物隔离级设计的一点也不高级 隔离级别只是一个很烧脑的概念,并不是什么高大上的技术. RU,全称read-uncommitted, 中文翻译:读未提交,能够读到未提交…

static关键字在C语言中的作用

static关键字有三个主要作用&#xff1a; 1.修饰全局变量 2.修饰函数 3.修饰局部变量 (1)首先是修饰全局变量&#xff0c;就是变量只能在本文件中使用&#xff0c;不能在其他文件中使用 代码示例&#xff1a;vi 1.c vi 2.c 编译&#xff1a;gcc 1.c 2.c -o main ./main …

指定数组的维度,返回由随机数构成的数组numpy.random.ranf()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 指定数组的维度&#xff0c; 返回由随机数构成的数组 numpy.random.ranf() 选择题 以下说法错误的是? import numpy as np print("【执行1】np.random.ranf()") print(np.random.ra…

Redis整合jedis 学习

前言 redis简单来讲是内存数据库&#xff0c;因为是将数据存放到内存&#xff0c;因此读写速率高快(传统数据库&#xff0c;不是先从内存转到硬存&#xff0c;慢) 1.jedis连接Redis redis是java操作redis的客户端&#xff0c;通过他我们能通过java语句操控redis。 jedis对于…

Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能

文章目录 &#x1f31f;前言&#x1f31f;先看效果&#x1f31f;整体代码&#xff08;详细注释&#xff09;&#x1f31f;写在最后 &#x1f31f;前言 哈喽小伙伴们&#xff0c;最近公司有个小需求&#xff0c;就是基于Echarts的折线图&#xff0c;做一个数据直播的功能&#…

manacher(图文详解)

文章目录 简要介绍实际应用算法详解 简要介绍 马拉车算法&#xff0c;Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法&#xff0c;是一个叫Manacher的人在1975年发明的&#xff0c;这个方法的最大贡献是在于将时间复杂度提升到了线性O(N)。 实际应用 刷…

玩转脚本实现自动化

目录 前言&#xff1a; 自动化原理 前置和后置脚本的区别&#xff08;它们的功能就如同名字一样&#xff09; 淘宝联盟接入文档 签名算法 调用示例 配置环境参数 设置全局变量 设置相关环境下的服务器地址 开始分析参数指定规则 添加接口 前言&#xff1a; 自动化测…