我们的测试代码使用assert。
那么断言类中是否有任何函数可以期望void函数抛出异常?
答案 0 :(得分:1)
@Test(expected=MyCustomException.class)
public void testBlahBlah_BlahBlah(){
voidMethodThatThrowsException();
}
这个JUnit的注释正是你要找的。 p>
答案 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");
}
}