📜  预期的异常 junit - Java (1)

📅  最后修改于: 2023-12-03 14:58:46.697000             🧑  作者: Mango

预期的异常 junit - Java

JUnit是一个广泛使用的Java单元测试框架,它允许软件开发人员编写测试来验证代码的正确性和预期行为。在测试过程中,经常需要测试异常条件,即测试某些代码是否会抛出期待的异常。JUnit提供了一个简单的方法来测试预期的异常,这在测试未处理的异常时尤其有用。

预期异常注解

@Test注解是JUnit测试用例中的关键注解,它告诉JUnit它所标注的方法是一个测试用例。当测试方法被调用时,JUnit会检查是否抛出了任何异常,如果抛出了异常,JUnit会将测试用例标记为失败。然而,并不是所有的异常都表示错误,有些异常是我们故意引发的,因此我们需要一种方法来告诉JUnit预期异常,以便测试能够通过正常抛出异常而不是失败。

JUnit提供了一个@Test(expected = Exception.class)注解,它允许我们在测试用例中声明我们期望的异常类型。在此注解中,我们需要指定所期望的异常类型,例如:

@Test(expected = ArithmeticException.class)
public void testDivideByZero() {
    int i = 1 / 0;
}

在这个例子中,我们期望测试方法会抛出ArithmeticException异常,因为它试图将一个整数1除以零。JUnit会捕获这个异常,并将该测试标记为通过。

预期异常匹配器

除了上面的方法,JUnit还提供了一些更高级的方法来测试预期的异常。例如,我们可能希望测试异常的消息、异常的原因等等。为了实现这些,JUnit提供了一些与expected注解一起使用的“预期异常匹配器”。

消息匹配器

@Test(expected = Exception.class, message = "Expected exception message")注解允许我们测试异常所包含的消息是否符合我们的预期。例如:

@Test(expected = IllegalArgumentException.class, message = "Invalid argument")
public void testIllegalArgument() {
    throw new IllegalArgumentException("Invalid argument");
}

在这个例子中,我们期望测试方法会抛出IllegalArgumentException异常,并且异常消息应该是“Invalid argument”。

原因匹配器

JUnit还提供了ExpectedException类,它允许我们测试异常的原因。例如:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void testArrayIndexOutOfBoundsException() {
    exceptionRule.expect(ArrayIndexOutOfBoundsException.class);
    exceptionRule.expectMessage("Index 5 out of bounds for length 2");
    int[] array = new int[2];
    array[5] = 1;
}

在这个例子中,我们使用ExpectedException类来测试ArrayIndexOutOfBoundsException异常。我们使用expect()方法指定期望的异常类型,并使用expectMessage()方法指定期望的异常消息(即“Index 5 out of bounds for length 2”)。如果测试发现异常与预期的异常不匹配,则测试失败。

结论

JUnit提供了多种方法来测试预期的异常,从最基本的expected注解到更高级的检查消息、原因等。当测试代码中有错误的情况下,预期异常的技术可以提供一种简单而快速的方法来检查代码是否能够正确处理异常。