為什麼 TestNG 允許多個預期異常?
TestNG 在單個 @Test 方法中支援多個異常。這類似於 Java 中的 catch 異常,使用者可以指定可能丟擲的多個異常類。
例如:catch 異常中的語法是
catch(IOException | InterruptedException ex) {
類似地,TestNG 中的語法是
@Test(expectedExceptions={NullPointerException.class,IllegalArgumentException.class })
public void throwsNullPointer() {
throw new NullPointerException();
}
需要注意的是,在這種情況下,TestNG 期望從列表中丟擲其中一個異常。如果異常與列表不同,或者沒有異常,則方法將失敗。如果丟擲的是列表中提到的異常,則方法將透過。
如果未丟擲預期異常,則錯誤示例如下所示:
方法 throwsNullPointer()[pri:0, instance:OrderofTestExecutionInTestNG@3567135c] 應該丟擲 [class java.lang.NullPointerException, class java.lang.IllegalArgumentException] 中任何型別的異常。
在這篇文章中,我們將說明在一個測試方法中支援多個異常的可能原因。
第一個原因是提供與 Java 中 catch 語句類似的功能。它允許使用者在方法級別處理異常,並可以避免在實際程式碼中使用 try catch 塊。
有時,程式碼很複雜,並且可能在獨特的場景中丟擲異常。為了處理這種情況,最好具備此功能。
一個通用的原因可能是測試某個功能的多個實現,這些實現根據提供的輸入丟擲異常的方式可能不同。這些實現可能是不同的類,也可能是同一個類的不同版本。
在測試依賴於第三方軟體的程式碼時,這非常有用,並且必須使用該軟體的多個版本進行測試。應使用不同的資料在整個軟體中測試不同的行為。
在對 API 或功能進行“黑盒”測試時也很有用,在這種情況下,介面規範不明確。
在執行程式碼效率(例如涵蓋異常處理的單元測試)時,它非常方便。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP