JUnit 预期异常测试:@Test(expected)
JUnit 提供了跟踪异常的功能,也可以检查代码是否抛出了预期异常。
Junit4 提供了简单易读的异常测试方法,您可以使用
- @test 注解的可选参数(expected),以及
- 为了跟踪信息,可以使用“fail()”
在测试异常时,您需要确保在 @test 注解的可选参数中提供的异常类是相同的。这是因为您期望从您正在进行单元测试的方法中抛出异常,否则我们的 JUnit 测试将会失败。
示例:@Test(expected=IllegalArgumentException.class)
通过使用“expected”参数,您可以指定测试可能抛出的异常名称。在上面的示例中,您使用了“IllegalArgumentException”,如果开发人员使用不允许的参数,测试将抛出此异常。
使用 @test(expected) 的示例
让我们通过创建一个抛出异常的 Java 类来理解异常测试。您将在测试类中处理并测试它。考虑 JUnitMessage.java 有一个方法,它根据用户收到的输入简单地执行数学运算。如果输入任何非法参数,它将抛出“ArithmeticException”。见下文
package guru99.junit; public class JUnitMessage{ private String message; public JUnitMessage(String message) { this.message = message; } public void printMessage(){ System.out.println(message); int divide=1/0; } public String printHiMessage(){ message="Hi!" + message; System.out.println(message); return message; } }
代码解释
- 代码行 7: 创建一个带字段初始化的参数化构造函数。
- 代码行 11-14:创建一个用于数学运算的方法。
- 代码行 18:创建另一个方法来打印消息。
- 代码行 20:创建一个新字符串来打印消息。
- 代码行 21:打印第 20 行创建的新消息。
让我们为上述 Java 类创建一个测试类来验证异常。
请看下面的测试类,它对上述 Java 类抛出的异常(这里是 ArithmeticException)进行单元测试
AirthematicTest.java
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class AirthematicTest { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage(){ System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage(){ message="Hi!" + message; System.out.println("Junit Message is printing "); assertEquals(message, junitMessage.printMessage()); } }
代码解释
- 代码行 13:使用 @Test 注解创建我们的测试。当您执行上述类的方法时,它将调用数学运算。这里预期是算术异常,因此您将其作为 @Test 中的参数列出。
- 代码行 17:调用 JUnitMessage.java 的 printMessage()
- 代码行 18:创建另一个方法来打印 HI 消息。
如果您执行此测试类,测试方法将使用每个定义的参数执行。在上面的示例中,测试方法执行了五次。
让我们执行它并验证结果。下面是执行 JunitTestExample.java 的测试运行器类
输出
以下是输出,显示测试成功,没有失败跟踪,如下所示
摘要
- 异常测试是 JUnit4 中引入的一个特殊功能。在本教程中,您学习了如何使用 @test(expected) 在 JUnit 中测试异常
- Junit 提供了跟踪异常的功能,还可以检查代码是否抛出异常
- 对于异常测试,您可以使用
- @test 注解的可选参数(expected),以及
- 为了跟踪信息,可以使用“fail()”