2014-02-20 36 views
1

有沒有辦法從ITestListener實現中實際檢測到已經「通過」的測試失敗?如何在偵聽器中通過TestNG測試失敗

我的用例是這樣的:我運行我的套件中的所有測試,然後在套件結束時執行一些其他操作。作爲這些行動的結果,我希望以前「通過」的測試現在被標記爲失敗。

從我的偵聽器內(這是擴展TestListenerAdapter),我打電話:

result.setStatus(ITestResult.FAILURE); 
result.setThrowable(t); 

一些ITestResult對象。在其他地方聽衆,我已經覆蓋onFinish像這樣:

@Override 
public void onTestFailure(final ITestResult result) { 
    super.onTestFailure(result); 

    // TODO: This is updating the state of the test, but NOT causing it to fail 
    Reporter.setCurrentTestResult(result); 
} 

當我失敗的考驗,正在執行的回調。將Throwable添加到測試結果中。一切都按我的預期發生。

然而,無論是生成報告和構建輸出是不正確的:

[testng] =============================================== 
[testng] <redacted>Tests 
[testng] Total tests run: 51, Failures: 0, Skips: 0 
[testng] =============================================== 

儘管這些測試結果的3正在更新失敗:

Nonsensical report output

任何想法?

+0

我不太瞭解TestNG,但是當你在監聽器中拋出異常時會發生什麼? –

+0

在套件失敗的意義上,從偵聽器內部拋出異常「有效」,這實質上就是我正在嘗試做的事情。我現在正在做的是積累失敗(及其原因),如上所示,然後拋出一個運行時異常,如果失敗計數大於0.我只是擔心這是一個棘手的方式來做事,最終會如果我升級我的TestNG版本,請打破。 – Ryan

回答

0

我使用IInvokedMethodListener,使用此approach將狀態從FAILURE更改爲SKIP成功。

在整個測試套件完成後但在每個測試方法之後,不會調用狀態可更改的afterInvocation方法。

相關問題