2

抛异常相信大家都会吧?只需要这样就可以了:

throw new RuntimeException("didispace.com");

但是,在开发过程中有一些情况,我们需要测试程序对异常的处理逻辑是否正确,这个时候就需要我们在程序运行时主动的抛出异常才会触发相关逻辑来验证正确性,比较常见的场景有:事务是否会回滚Web层的统一异常处理等等。

这个时候,你是如何去制造异常,来支持你的调试呢?

下面我就以前写的Spring Boot教程里一个事务处理的例子为场景,给大家看看一些常见的调试操作以及今天要讲的更优雅的操作。

案例说明

先介绍下场景,这是一个用Spring Data JPA实现的数据库操作案例,右侧UserService里一个事务操作,里面含有5句User表的插入语句。

因为@Transactional注解存在,所以saveSomeUsers函数下的数据插入要么都成功,要么都失败。成功很好测试,要测试失败的话,则需要我们让这个函数抛出异常才能触发回滚操作。

撸起袖子就是抛

为了抛出异常以验证事务是否能回滚,很多小伙伴是这样干的:

file

直接在这个函数里手工抛出异常,很粗暴很直接,是可以完成目标。虽然这种方法在单元测试中作为一种场景是可以的,但如果在复杂的业务过程中这样做就不那么优雅了,因为你测试好还要删掉它,如果忘记了,那就是直接写了个Bug。

优雅地抛异常

实际上IDEA提供了自由抛异常的功能,只需要在Debug的时候,右键前几天介绍的回退操作Reset Frame位置,就可以看到如下图箭头所标的Throw Exception操作了。

file

然后在弹出框中,你就可以编写你想要抛出的异常了:

file

是不是很简单呢?赶紧打开IDEA试一试吧!这里视频教程也同步更新了,点击就可以查看,我正在连载IDEA专题的视频内容,感兴趣的小伙伴可以关注我哟!

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

程序猿DD
2.2k 声望2.8k 粉丝

作品:《Spring Cloud微服务实战》、SpringForAll社区、OpenWrite、Youtube中文配音