IDEA Tips:Debug时如何优雅地制造异常?
抛异常相信大家都会吧?只需要这样就可以了:
throw new RuntimeException("didispace.com");
但是,在开发过程中有一些情况,我们需要测试程序对异常的处理逻辑是否正确,这个时候就需要我们在程序运行时主动的抛出异常才会触发相关逻辑来验证正确性,比较常见的场景有:事务是否会回滚、Web层的统一异常处理等等。
这个时候,你是如何去制造异常,来支持你的调试呢?
下面我就以前写的Spring Boot教程(https://blog.didispace.com/spring-boot-learning-2x/)里一个事务处理的例子为场景,给大家看看一些常见的调试操作以及今天要讲的更优雅的操作。
案例说明
先介绍下场景,这是一个用Spring Data JPA实现的数据库操作案例,右侧UserService
里一个事务操作,里面含有5句User表的插入语句。
因为@Transactional
注解存在,所以saveSomeUsers
函数下的数据插入要么都成功,要么都失败。成功很好测试,要测试失败的话,则需要我们让这个函数抛出异常才能触发回滚操作。
撸起袖子就是抛
为了抛出异常以验证事务是否能回滚,很多小伙伴是这样干的:
直接在这个函数里手工抛出异常,很粗暴很直接,是可以完成目标。虽然这种方法在单元测试中作为一种场景是可以的,但如果在复杂的业务过程中这样做就不那么优雅了,因为你测试好还要删掉它,如果忘记了,那就是直接写了个Bug。
优雅地抛异常
实际上IDEA提供了自由抛异常的功能,只需要在Debug的时候,右键前几天介绍的回退操作Reset Frame(https://blog.didispace.com/intellij-idea-tips-005/)位置,就可以看到如下图箭头所标的Throw Exception
操作了。
然后在弹出框中,你就可以编写你想要抛出的异常了:
是不是很简单呢?赶紧打开IDEA试一试吧!
我正在连载IDEA专题(https://space.bilibili.com/396803537)的视频内容,感兴趣的小伙伴可以关注我的B站或视频号哟!
推荐阅读
你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书、创过业、国企4年互联网6年。10年前毕业加入宇宙行,工资不高、也不算太忙,业余坚持研究技术和做自己想做的东西。4年后离开国企,加入永辉互联网板块的创业团队,从开发、到架构、到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。