[英]How to assert that a void function will throw a exception?
我們的測試代碼使用assert。
那么在assert類中是否有任何函數可以期望void函數引發異常?
@Test(expected=MyCustomException.class)
public void testBlahBlah_BlahBlah(){
voidMethodThatThrowsException();
}
您正在尋找JUnit的注釋。
我通過兩種方式完成此任務:
第一種方法是,如果我想確保引發了異常,但又沒有使測試失敗,我想繼續斷言。
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");
}
大多數測試框架(尤其是JUnit)將允許您指定異常類,這樣,如果未引發異常,則測試將失敗。
如果不能使用此方法,則可以將其包裝在try / catch中,然后在catch塊中進行斷言。
例如(使用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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.