《放弃繁琐的if-else》开启assert断言的新时代(代码片段)

weipt0106 weipt0106     2022-12-05     413

关键词:

一、场景再现

  我们平时在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("... 查看详情