簡體   English   中英

TestNG @AfterMethod 與 DataProvider

[英]TestNG @AfterMethod with DataProvider

我在玩 TestNG,發現 @AfterMethod 和 @BeforeMethod 在我使用 dataProvider 時被多次調用。 是否可以在使用從 dataProvider 傳遞的所有參數執行 @Test 后僅調用一次方法。 就像我們可以在 dataProvider 調用 'testPrimeNumberChecker' 5 次之后只調用一次 'tearDown' 方法。

import org.testng.Assert;    
import org.testng.annotations.BeforeMethod;    
import org.testng.annotations.DataProvider;    
import org.testng.annotations.Test;    

public class ParamTestWithDataProvider1 {    
    private PrimeNumberChecker primeNumberChecker;    
    private static final Logger logger = Logger.getLogger(ParamTestWithDataProvider1.class);    

    @BeforeMethod    
    public void initialize() {    
        logger.info("Before Method Fired !! - " );    
        primeNumberChecker = new PrimeNumberChecker();    
    }    

    @@AfterMethod    
    public void tearDown() {    
        logger.info("After Method Fired !!  " );      
    }    

    @DataProvider(name = "test1")    
    public static Object[][] primeNumbers() {    
        return new Object[][] { { 2, true }, { 6, false }, { 19, true },    
            { 22, false }, { 23, true } };    
    }    

    @Test(dataProvider = "test1")    
    public void testPrimeNumberChecker(Integer inputNumber,    
        Boolean expectedResult) {    
    logger.info(inputNumber + " " + expectedResult);    
    Assert.assertEquals(expectedResult,    
            primeNumberChecker.validate(inputNumber));    
    }    
}

給大家提個懶人的想法:可以使用TestListener擴展類,把tearDown方法放到這個類的特定方法中(即tearDownListener)。
在 onTestFailure 和 onTestSuccess 中,您可以增加一個計數器。
當 TestListener 攔截最后一個測試時,您可以執行 tearDownListener。
問候

一種方法是使用@BeforeGroups 和@AfterGroups。 讓您的測試屬於一個組,然后使用 Before/After 組注釋為測試進行一次設置/拆卸。

一種解決方法是使用ITestNGMethod#hasMoreInvocation來檢查它是否是最后一次方法調用。

    @AfterMethod(alwaysRun = true)
    public void afterMethod(ITestResult testResult) {
        if (!testResult.getMethod().hasMoreInvocation()) {
            // This will be executed once, after a test method has been invoked for all parameters sequences defined in the corresponding @DataProvider
        }
    }

如果您希望即使在失敗的情況下也能執行該方法,請確保添加alwaysRun = true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM