2017-03-01 69 views
0

我可以通過執行對測試失敗的行動:如何獲取在Java中的Cucumber測試失敗時引發的異常?

@After 
public void afterTest(Scenario scenario) { 
    if (scenario.isFailed()) { 
     /*Do stuff*/ 
    } 
} 

但是一些我需要執行的操作取決於拋出的異常,並在它被扔什麼情況。有沒有辦法讓Throwable導致測試失敗?例如JUnit中我會通過延長TestWatcher做到這一點,並增加一條規則,我的測試:

@Override 
protected void failed(Throwable e, Description description) { 
    /*Do stuff with e*/ 
} 

然而,黃瓜的JUnit iplementation不允許使用規則,因此該方案不會與黃瓜工作。

我不認爲我需要解釋爲什麼在訪問測試失敗拋出的異常將是有益的,但是我仍然會提供了一個例子:

我的測試環境並不總是穩定的,所以我的測試可能會失敗意外地在任何時候(沒有特定的地方我可以嘗試捕捉異常,因爲它可能隨時發生)。當發生這種情況時,我需要測試重新安排另一次嘗試,並記錄事件,以便我們可以獲得一些有關環境不穩定性(何時,多頻繁,多久等)的良好統計數據。

回答

0

您可以通過此編寫您自己的定製實現Formatter & Reporter界面。 Formatter的空實現是您可以擴展的NullFormatter.java。您需要提供Reporter接口的實現。

感興趣的方法可能是Reporter接口的result(),也可能是Formatter的done()方法。結果()有Result對象,但有例外。

爲清楚起見,您可以查看RerunFormatter.java

Github Formatter source

public void result(Result result) { 
     //Code to create logs or store to a database etc... 
     result.getError(); 
     result.getErrorMessage(); 
} 

您需要將這個類(com.myimpl.CustomFormRep)添加到插件選項。

plugin={"pretty", "html:report", "json:reports.json","rerun:target/rerun.txt",com.myimpl.CustomFormRep} 

More details on custom formatters.

您可以使用重新運行插件獲取的失敗方案的列表再次運行。不確定計劃一系列失敗的測試,創建批處理作業的代碼或在您的CI工具上安排一個。

相關問題