关键词:
一、场景再现
我们平时在service操作数据库,难免会出现这种情况:
if(null == result)
else
这样的代码会吞噬掉你有限的代码空间,虽然通俗易懂,但一旦爆炸式的袭来,将会是一场阅读灾难。
终于,在java8到来之际,带来了福音,利用option解决了NullPoint问题,不用在代码里面判空拦截(不懂的,尽快问度娘,此处不赘述)
此篇文章,我们主要介绍Assert断言带来的丝滑体验。
注:Assert抛出的异常,刚好可以被全局异常拦截(https://www.cnblogs.com/weipt0106/p/13269277.html)
二、断言具体的实现
2.1、写一个AssertUtils
当然也可以参看Hutools提供的Assert,但我们自己写,可以抛出我们自己定义的异常,方便全局异常处理。
public abstract class AssertUtils /** * 如果入参collection集合为空,则抛出201异常 * @param collection * @throws BizException */ public static void notEmpty(@Nullable Collection collection,SCodeEnum codeEum) throws BizException if (ObjectUtils.isEmpty(collection)) throw new BizException(codeEum); /** * 如果入参对象为null,抛出异常 * @param object * @throws BizException */ public static <T> T notNull(T object,SCodeEnum codeEum) throws BizException if (object == null) throw new BizException(codeEum); return object; /** * 如果入参text为空,则抛出异常 * @param text * @throws BizException */ public static void hasText(@Nullable String text,SCodeEnum codeEum) throws BizException if (!StringUtils.hasText(text)) throw new BizException(codeEum); /** * 断言是否为真,如果为 @code false 抛出 @code BizException 异常<br> * @param expression 布尔值 * @param codeEum 错误码 * @throws BizException if expression is @code false */ public static void isTrue(boolean expression, SCodeEnum codeEum) throws BizException if (false == expression) throw new BizException(codeEum); /** * 断言是否为假,如果为 @code true 抛出 @code BizException 异常<br> * @param expression 布尔值 * @param codeEum 错误码 * @throws BizException if expression is @code false */ public static void isFalse(boolean expression, SCodeEnum codeEum) throws BizException if (expression) throw new BizException(codeEum);
2.2、代码中的使用
替代if-else的最佳体验
//判断批量操作是否成功 List<SiteProject> siteProjects = BeanUtils.convertToResponse(SiteProject.class, createReqs); boolean flag = this.saveBatch(siteProjects); AssertUtils.isTrue(flag, SCodeEnum.INSERT_ERROR); //传入条件,返回true,false这种方式是万能的 int updateNum = siteProjectMapper.updateById(updateReq); AssertUtils.isTrue(updateNum>0, SCodeEnum.UPDATE_ERROR);//判断对象不为空 ResponseBean responseBean = commonOperateFlowable.startProcess(wfProcessExecBean); AssertUtils.notNull(responseBean, SCodeEnum.INSERT_ERROR);
什么时候用断言(assert)?
...序最基本、关键的正确性。断言检查通常在开发和测试时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true;如果表达式的值为false... 查看详情
什么时候用断言(assert)?
...基本、关键的正确性。断言检查通常在开发和测试 时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言 是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true;如果表 ... 查看详情
什么时候用断言(assert)?(代码片段)
...序最基本、关键的正确性。断言检查通常在开发和测试时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true;如果表达... 查看详情
java中断言assert啥意思?
...结束执行。另外注意:调试程序的时候可以使用如下语句开启断言java-ea例子名称拒绝抄袭、拒绝复制,希望能帮到你!参考技术A通俗讲就是在程序某处断定某值,比如f(SomeClassa)assert(a!=null);//判断此时对象a是不是等于null,不等... 查看详情
java的参数检查与断言-guavapreconditions
...assert 语句,并且默认该特性是被关掉,需 -ea 开启。assertobject!=null;assertobject!=null:"objectcan'tben 查看详情
python断言(assert)的用法,你真的懂吗?(代码片段)
...最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。我们可以通过以下这个简单的例子来理解assert。>>>assertTrue#Nothinghappens>>>assertFalseTrace... 查看详情
python断言方法:assert
...测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。用unittest组件测试用例的时候,断言的方法还是很多的,下面介绍几种常用的断言方法:assertEqual、assertIn、assertTrue基本断言方法基本的断言方法提供了测试结果... 查看详情
如何使用 Assert.Throws 断言异常的类型?
】如何使用Assert.Throws断言异常的类型?【英文标题】:HowdoIuseAssert.Throwstoassertthetypeoftheexception?【发布时间】:2010-12-0905:37:21【问题描述】:如何使用Assert.Throws来断言异常的类型和实际的消息措辞?类似这样的:Assert.Throws<Exce... 查看详情
junit的断言assert
...一个报错函数,它也是一个宏,并且作用并非“报错”。assert()的用法像是一种“契约式编程”,在我的理解中,它所表达的意思就是程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句。if(假设成立){程序... 查看详情
防御式编程之断言assert的使用
...预料的错误,这是一种提高软件质量的辅助性方法,断言assert就用于防御式编程,编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。使用断言是为了验证预期的结果——当程序执行到断言的位置时,... 查看详情
java之assert(断言)
我们知道C/C++语言中有断言的功能(assert)。在JavaSE1.4版本以后也增加了断言的特性。断言是为了方便调试程序,并不是发布程序的组成部分。理解这一点是很关键的。默认情况下,JVM是关闭断言的。因此如果想使用断言调试程序... 查看详情
assert断言(代码片段)
1.Assert断言伪代码assertx>=0:"xmust>=0";//assert即为断言,x>=0预期为true,如果计算结果为false,则断言失败2.assert断言失败,抛出AssertionError抛出的是Error不是Exception抛出错误,程序结束退出。断言不能用于可恢复的程序错误,只... 查看详情
pytest7assert断言(代码片段)
...断言,就失去了自动化测试的意义了。 断言用到的是assert关键字。之前的介绍,有的测试方法中其实用到了assert断言。简单的来说,就是预期的结果去和实际结果做对比,符合预期结果就是pass,不符合就fail。比如以下的一... 查看详情
sv--assertions断言(代码片段)
SV--Assertions断言目录SV--Assertions断言1.简介1.1立即断言1.2并发断言2.SVA(systemverilogassertion)2.1Sequence2.2Property2.2.1implication2.2.2repetition重复操作2.2.3gotorepetition跟随重复2.2.4Nonconsecutiverepetition非连续重复2.2.5throughout2.2.6within2.3SVA方法2.3.1$ros... 查看详情
使用 Fluent Assertions 库的多个断言
】使用FluentAssertions库的多个断言【英文标题】:MultipleassertionsusingFluentAssertionslibrary【发布时间】:2018-02-0713:13:29【问题描述】:FluentAssertions似乎在NUnit的Assert.Multiple块中不起作用:Assert.Multiple(()=>1.Should().Be(2);3.Should().Be(4););... 查看详情
java编程中的assert怎么用啊?
...查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。 assert关键字语法很简单,有两种用法: 1、assert<boolean表达式> 如果<boolean表达式>为true,则程... 查看详情
java编程中的assert怎么用啊?
...查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。 assert关键字语法很简单,有两种用法: 1、assert<boolean表达式> 如果<boolean表达式>为true,则程... 查看详情
spring的断言工具类assert的基本使用
这几天比较闲看了下以前的项目,发现了这个spring下的Assert方法,(以前用过,不过好像忘的差不多了*.*)org.springframework.util.Assert;Assert断言工具类,通常用于数据合法性检查.平时做判断通常都是这样写if(message==null||message.equls("... 查看详情