我在玩 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));
    }
}

最佳答案

一种方法是使用@BeforeGroups 和@AfterGroups。让您的测试属于一个组,然后使用 Before/After 组注释为测试进行一次设置/拆卸。

关于java - TestNG @AfterMethod 与 DataProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22798309/

10-10 09:31