簡體   English   中英

當相關測試標記為通過時,TestNG跳過@Test

[英]TestNG skipping @Test, when dependent tests are marked as Pass

這是我的情況:

在我的許多測試中,我可能會拋出PassedException (我創建的異常表明測試已通過,但停止了執行)。

最初,我所有的測試都有一個expectedExceptions = PassedException.class ,並在最后拋出了PassedException 我不喜歡這種解決方案。

我對其進行了更改,以便在TestListeneronTestFailure(ITestResult result)方法中檢查是否可拋出類型為PassedException.class ,如果是,則調用result.setStatus(ITestResult.SUCCESS)

這行得通...測試被標記為通過,但是,如果另一個測試依賴於拋出PassedException.class的方法,則它將跳過它。

你們當中有人知道為什么會這樣嗎,以及如何解決(或解決方法)嗎?

編輯:這是一個重復的情況:

public class PassedException extends RuntimeException{}

public class Tester {

 @Test
 public static void test1(){
    throw new PassedException(); 
 }
 @Test(dependsOnMethods = "test1")
 public static void test2(){

 }
}

public class TestListener extends TestListenerAdapter {

 @Override
 public void onTestFailure(ITestResult result){
    Throwable t = result.getThrowable();
    if (t.getClass().equals(PassedException.class)){
        result.setStatus(ITestResult.SUCCESS);
    }
 }
}

我承認,我不完全理解PassingException背后的原因,但是我有兩個建議:

  • 解決方法

    @Test(alwaysRun = true,dependsOnMethods = {“ myFailingTest”})

這將創建一個軟依賴性 ,即,即使依賴於注釋的測試失敗/引發異常( 文檔 ),也應執行帶注釋的測試。 但是,在第一種情況下,您遇到了這樣的問題,這表明TestNG中存在錯誤,或者您的測試設計與TestNG的預期用法相沖突。 從長遠來看,使用此替代方法會給您造成傷害。

  • 重構測試

使用expectedExceptions選項是一種測試應用程序中快速失敗方案的可靠方法。 據我了解您的用例,關鍵是以這樣一種方式縮小測試范圍,即只有一個可能的結果,即在給定的示例中,您將有一個模擬“超級用戶”的測試,其中很棒的電源按鈕可用,並且您所做的事情很棒。 然后還有另一個測試-模擬“簡單用戶”-在該測試中不可用,並且您始終希望拋出PassingException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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