如何断言void函数会抛出异常?

时间:2015-06-30 23:30:03

标签: java assert

我们的测试代码使用assert。

那么断言类中是否有任何函数可以期望void函数抛出异常?

3 个答案:

答案 0 :(得分:1)

@Test(expected=MyCustomException.class)
public void testBlahBlah_BlahBlah(){
     voidMethodThatThrowsException();
}

这个JUnit的注释正是你要找的。

答案 1 :(得分:1)

我实现这两个方法:

第一种方法是,如果我想确保抛出异常,但没有通过测试失败,我想继续断言。

try {
    myObject.methodThatShouldThrowAnException("baddata");
    assert.fail("Exception should have been thrown");
catch (SomeException e) { }

assert.equals(anotherMethod(), "hello"); 

第二种方法是如果我不想做其他断言(这是JUnit,可能因你使用的测试框架而异... TestNG有类似的语法):

@Test(expected = SomeException.class)
public void myTest() {
    myObject.methodThatShouldThrowAnException("baddata");
}

答案 2 :(得分:1)

大多数测试框架(尤其是JUnit)将允许您指定一个异常类,以便在未抛出异常时测试将失败。

如果你不能使用这个方法,那么你可以将它包装在try / catch中并在catch块中执行断言。

Ex(使用JUnit):

@Test(expected=SomeException.class)
public void testSomeFunction_expectedSomeException(){
    MyClass clazz = new MyClass();
    clazz.someMethodThatThrowsTheException();
    fail("shouldn't have gotten here...");
}

或者:

//@Test -- this annotation may or may not be supported by your framework
public void testSomeFunction_expectedSomeException(){
    MyClass clazz = new MyClass();
    try {
        clazz.someMethodThatThrowsTheException();
        fail("shouldn't have gotten here...");
    }
    catch (SomeException ex) {
        // assert...
    }
    catch (Exception ex) {
        fail("Some other exception occurred, also not good");
    }
}