测试异常

时间:2020-01-09 10:35:38  来源:igfitidea点击:

有时,我们可能需要测试在给定无效输入或者在无效状态下执行时,代码是否抛出了正确的异常。有两种方法可以做到这一点。

表示预期测试方法会导致引发异常的第一种方法是,将" expected"属性添加到" @Test"注释中,如下所示:

@Test(expected = IllegalArgumentException.class)
public void testForExceptions1() {
    MyUnit myUnit = new MyUnit();

    myUnit.throwIllegalArgumentException();
}

注意" expected"属性是如何设置为" IllegalArgumentException.class"的。这向测试运行程序发出信号,表示它在执行此测试方法时会抛出" IllegalArgumentException"。如果没有抛出" IllegalArgumentException",则测试失败。

第二种方法是将我们希望引发异常的代码包装在try-catch块中,如下所示:

@Test
public void testForExceptions2() {
    MyUnit myUnit = new MyUnit();

    try{
        myUnit.throwIllegalArgumentException();

        fail("expected IllegalArgumentException");

    } catch(IllegalArgumentException e){
        //ignore, this exception is expected.
    }

注意,在调用myUnit.throwIllegalArgumentException()之后,调用了fail()方法。如果throwIllegalArgumentException()方法返回normall,则将执行此fail()调用,从而导致测试失败。

相应地,如果throwIllegalArgumentException()方法抛出预期的IllegalArgumentException,它将被捕获并被忽略。测试继续。

我们要使用两种方法中的哪一种取决于我们。当然,如果我们需要在同一测试方法中测试多个异常,则第一种方法将行不通。请记住,第一种方法会在引发预期的异常时中止测试方法。然后,我们将不得不使用第二种方法来测试异常,在该方法中,当引发预期的异常时,测试方法将继续。