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

throw new RuntimeException("didispace.com");

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

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

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

案例说明

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

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

撸起袖子就是抛

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

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

优雅地抛异常

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

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

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

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

IDEA小技巧:Debug时如何优雅地制造异常?的更多相关文章

  1. vs中debug的一个小技巧 -- debug时忽略某段代码

    #line 这是C#中的预处理命令 Visual Studio 2008 Visual Studio 2005 Visual Studio 2012 #line hidden 指令对调试器隐藏若干连续 ...

  2. eclipse debug小技巧

    测试 Expressions 代码 public static void main(String[] args) { int x=100; System.out.println("----& ...

  3. python debug小技巧&&工程能力的几点建议

    Debug小技巧: 转载请声明本文的引用出处:仰望大牛的小清新 1.初次编程时,在每一个if后面都写上else,这样,如果你的else原本是不应该运行的,那么就可以在else中输出此时的状态信息便于排 ...

  4. CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅

    首页   登录注册         CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅 阅读 8113 收藏 927 2017-09-26 原文链接:github.com 腾讯云容器服务CSS,立 ...

  5. 让 Java 中 if else 更优雅的几个小技巧

    对于一个高级 crud 工程师‍而言,if else 是写代码时使用频率最高的关键词之一,然而有时过多的 if else 会让我们优雅的 crud 代码显得不那么优雅,并且感到脑壳疼

  6. linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!

    这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...

  7. gdb调试运行时的程序小技巧

    使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/bl ...

  8. java.text.MessageFormat格式化字符串时的小技巧

    java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...

  9. 献身说法---修复bug时的一些小技巧

    最近,修复了项目当中的一些bug,觉着有些思路可以分享出来供大家借鉴. 场景一 开发环境中系统正常运行,测试环境中,部分机器未能正常运行. 解决过程:远程连接了测试环境中的机器,观察了系统的运行情况, ...

随机推荐

  1. 4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论

    一.套接字UDP udp是无链接的,先启动哪一端都不会报错 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...

  2. file_put_contents利用技巧(php://filter协议)

    Round 1 <?php $content = '<?php exit; ?>'; $content .= $_POST['txt']; file_put_contents($_P ...

  3. C 上楼梯 中国石油大学新生训练赛#11

    问题 C: 上楼梯 时间限制: 1 Sec  内存限制: 128 MB提交 状态 题目描述 明明上n 级台阶可用四种步幅, 当然每种步幅花费的体力也不一样, 对应关系如下明明开始有m 个体力, 求他最 ...

  4. 题解0005:数的划分(洛谷P1025)

    题目描述:将整数 n 分成 k 份,每份不能为空,颠倒顺序的被看成一种分法. 题目链接:https://www.luogu.com.cn/problem/P1025 题目思路:深搜剪枝,规定搜索的下一 ...

  5. 数据库篇:mysql锁详解

    前言 sql事务的执行,如果需要锁定数据进行更新操作,则必定离不开锁 共享锁和排他锁 表锁 行锁 Record Lock 间隙锁 Gap Lock 行锁+间隙锁 Next-Key Lock 加锁场景( ...

  6. bash shell 中的 hash 命令有什么作用?

    linux 命令'hash'管理着一个内置的哈希表,记录了已执行过的命令的完整路径,用该命令可以打印出你所使用过的命令以及执行的次数. [root@localhost ~]# hashhits com ...

  7. 如何在不使用BasePACKAGE过滤器的情况下排除程序包?

    过滤程序包的方法不尽相同.但是弹簧启动提供了一个更复杂的选项,可以在不接触组件扫描的情况下实现这一点. 在使用注释@ SpringBootApplication时,可以使用排除属性. 请参阅下面的代码 ...

  8. requests库获取图片响应流进行转发

    遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题.......下面简单的描述解决方案 response = ...

  9. 什么是基于 Java 的 Spring 注解配置? 给一些注解的例子?

    基于 Java 的配置,允许你在少量的 Java 注解的帮助下,进行你的大部分 Spring 配置而非通过 XML 文件. 以@Configuration 注解为例,它用来标记类可以当做一个 bean ...

  10. C++ | 智能指针初探

    智能指针初探 在 c/c++ 语言中有一种特殊的类型--指针类型. 指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量.它可以直接对内存地址中的数据进行操作,是一种非常灵活的变量.指针被誉为 ...