為什麼 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 或功能進行“黑盒”測試時也很有用,在這種情況下,介面規範不明確。

  • 在執行程式碼效率(例如涵蓋異常處理的單元測試)時,它非常方便。

更新於:2023年8月21日

227 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.