簡體   English   中英

如何斷言void函數將引發異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM