2012-03-28 66 views
0

我以編程方式運行TestNG。我有一個用例,當任何測試發生任何異常時,我需要停止執行者。我的問題是:如何在異常發生時停止TestNG execution子手?

  1. 當Test或配置方法發生異常時,強制TestNG停止執行的最佳方式是什麼?
  2. 以編程方式執行時捕獲控制檯中的異常?

下面是執行測試運行的代碼片段:

TestListenerAdapter tla = new TestListenerAdapter(); 
IMethodInterceptor im = new TestMethodInterceptor(); 
TestNG testng = new TestNG(); 
testng.setTestClasses(new Class[] { TestClass1.class, TestClass2.class}); 
testng.addListener(tla); 
testng.setMethodInterceptor(im); 
testng.run(); 

回答

1

據我所知,有對停止執行沒有直接的規定。

您可能可以使用addListener調用添加2個偵聽器。 其中一個實施ITestListener,另一個實施IHookable,這兩個例子都可以在testng的site上得到。 ITestListener會給你一個onTestFailure()的方法。在這裏你可以設置一個值,表示出現故障。 在IHookable實現中,你可以檢查這個值,然後調用該方法,否則跳過它。

異常打印也可以在onTestFailure方法中處理。

+0

This Works。感謝您的建議。 – 2012-03-31 01:09:12

1

如前一個答案中所述,使用IHookable是通過跳過以下所有方法來模擬完整的測試套件取消的好方法。但是,沒有通知配置方法(因此不會取消配置方法)(例如,使用@BeforeClass@BeforeMethod註釋的方法),並且通常這是實際處理正在進行的地方。

要解決這個問題,你可以用IInvokedMethodListener代替IHookable,其方法也會爲配置方法激發。如果您想取消其餘的測試執行,則每次調用SkipException時調用beforeInvocation

在我的情況下,這成功地取消了所有進一步的處理而不做任何有關測試結構的假設。

相關問題