2016-07-29 70 views
0

我有這樣一個測試:TestNG的重試類不運行@BeforeClass也不@AfterClass方法

public class Test1 extends AbstractTest { 

    @Test(retryAnalyzer=Retry.class) 
    public void test(){ 
     System.out.println(this.getClass().getName() + " running."); 
     Assert.fail(); 
    } 

} 

隨着安裝和拆卸方法是這樣的:

public class AbstractTest { 

    @BeforeClass(alwaysRun = true) 
    public void setup() { 
     System.out.println(this.getClass().getName() + " initialized"); 
    } 

    @AfterClass(alwaysRun = true) 
    public void tearDown(){ 
     System.out.println(this.getClass().getName() + " complete"); 
    } 

} 

而重試類像這樣的:

public class Retry implements IRetryAnalyzer { 

    private int retryCount = 0; 
    private int maxRetryCount = 1; 

    public boolean retry(ITestResult result) { 
     if (retryCount < maxRetryCount) { 
      retryCount++; 
      return true; 
     } 
     return false; 
    } 

} 

但安裝和拆卸方法沒有之前和之後的測試方法儘管已經設置了運行運行成真。這裏有一些控制檯輸出:

tests.Test1 initialized 
tests.Test1 running. 
tests.Test1 running. 
tests.Test1 complete 

這是爲什麼?每次測試重試時我如何讓它們運行?

+0

你描述的是testng應該如何工作。你爲什麼需要它? – juherr

回答

0

註解 org.testng.annotations.BeforeMethodorg.testng.annotations.AfterMethod將表現爲你所需要的 - 換句話說,運行安裝和測試方法的每次調用之前推倒代碼,無論它是否是由重試觸發。

TestNG javadoc中的完整文檔@BeforeMethod@AfterMethod

+0

使用\ @BeforeMethod和\ @AfterMethod以我需要的方式工作。非常感謝。 – item5

2

此行爲是按設計。

@BeforeClass:註釋的方法將在調用當前類中的第一個測試方法之前運行。

  • 在你的情況下,它是setup,將打印初始化
  • setup將永不再運行,直到重新加載相同的類以執行。

@AfterClass:之後在當前類中的所有測試方法已運行被註釋的方法將被運行。

  • 在你的情況下,它是tearDown,所有的測試方法,包括所有重試當前類的嘗試已經在運行和打印完整後,它將運行。

注:retry(ITestResult result)返回true如果測試方法有重試,否則爲false。所以測試方法是否需要重試將受retry方法的控制。 @BeforeClass@AfterClass的行爲保持不變。

希望澄清。

相關問題