JUnit4中@Before注解代码块的异常处理方法咨询
JUnit4 @Before块异常处理方案
现有代码问题
- 捕获异常后直接抛出新的
Exception实例,完全丢失原始异常的栈追踪、错误类型、错误信息,无法定位存款操作的失败根因 - 冗余的try-catch块:方法签名已经声明
throws Exception,无需手动捕获再抛出无意义的新异常
JUnit4 @Before异常处理规则
如果@Before方法抛出未捕获的异常,JUnit会直接标记当前测试用例为执行失败,不会运行对应的@Test方法逻辑,这个设计是合理的:前置初始化失败的情况下,测试用例的执行没有意义。
正确写法
场景1:初始化异常直接终止测试(最常用)
直接删除冗余的try-catch块,把原始异常直接抛出即可,JUnit会自动保留完整异常信息:
@Before public void init() throws Exception{ b = new FirstNationalBank(); acc1 = b.openAccount(); acc2 = b.openAccount(); b.deposit(acc1, 1500); b.deposit(acc2, 12000); }
场景2:需要对异常做自定义处理后再抛出
如果要加日志、自定义错误提示,抛出新异常时需要把原始异常作为根因传入,保留栈信息:
@Before public void init() throws Exception{ b = new FirstNationalBank(); acc1 = b.openAccount(); acc2 = b.openAccount(); try{ b.deposit(acc1, 1500); b.deposit(acc2, 12000); }catch(Exception ex) { // 可在此处添加自定义日志逻辑 throw new Exception("测试前置初始化失败:存款操作异常", ex); } }
内容的提问来源于stack exchange,提问作者Makkador
相关产品推荐
相关产品推荐

