提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Junit单元测试异常处理方法
- 前言
- 案例准备
- 一、类方法内处理异常
- 二、测试方法中处理异常
- 1.try/catch/finally 语句
- 2.@Test(expected)
- 3.@ExpectedException
前言
提示:这里可以添加本文要记录的大概内容:
开发者在进行Java编程时会对程序中的异常进行处理。一般的,可以发生异常的方法内添加 try/catch/finally 等处理语句,在方法内部解决异常;也可以使用throw / throws 语句交由方法上一层进行解决。因此,在单元测试也应当考虑方法抛出异常的情况,对异常的处理也应当纳入单元测试框架中。JUnit提供了多种异常处理的机制,以帮助测试者验证需要处理的异常代码,本篇文章我们主要来探讨一下JUnit处理异常的方法
案例准备
提示:可结合下面实例理解异常处理方法
创建一个Caculator计算类,供测试类使用
由Caculator中我们主要测试除法中分母不能为0的异常处理,当分母为0时,会抛出ArithmeticException异常
创建测试类
一、类方法内处理异常
我们可以直接在方法中处理异常(主要由try/catch语句处理异常),然后在测试类中就不需要再处理异常,如下图所示
测试类中测试通过
二、测试方法中处理异常
我们也可以不在调用的方法内处理异常,而是由方法抛出交给测试方法类处理,在测试方法中处理异常主要有三种方式
注:测试方法中调用的方法为Caculator中的未处理异常的devide1()方法
1.try/catch/finally 语句
如同在类中方法一样,我们也可以直接在测试方法中使用try/catch/finally语句捕获异常
下图为例:
2.@Test(expected)
@Test注解中的参数expected允许测试者设置Throwable的子类,用于检测待测方法是否正确抛出异常。如针对方法divide1(),可以用下图的方法进行异常检测。该方法配置比较简单,易于使用,然而,该方法不能直接表明异常发生的位置,测试者需要进一步定位。
下图为例
3.@ExpectedException
Junit中的ExpectedException可以更精确地定位异常发生的位置,在应用ExpectedException类前,需要用@Rule 注解声明ExpectedException异常。然后在异常发生的位置前调用 expect 方法检测异常,此外,还可使用ExpectedException中的expectMessage方法设置异常属性信息
下图为例: