![](/img/trans.png)
[英]TestNG: Is it possible to use DataProvider in AfterTest(), AfterClass(), AfterMethod()?
[英]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.