[英]TestNG skipping @Test, when dependent tests are marked as Pass
這是我的情況:
在我的許多測試中,我可能會拋出PassedException
(我創建的異常表明測試已通過,但停止了執行)。
最初,我所有的測試都有一個expectedExceptions = PassedException.class
,並在最后拋出了PassedException
。 我不喜歡這種解決方案。
我對其進行了更改,以便在TestListener
的onTestFailure(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.