我在玩TestNG,发现在使用dataProvider时,@AfterMethod & @BeforeMethod不止一次被调用。在使用从dataProvider传递的所有参数执行@Test之后,是否可以只调用一次方法。就像在'tearDown‘被dataProvider调用5次之后,我们只能调用'testPrimeNumberChecker’方法一次。
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));
}
}发布于 2014-04-04 09:40:21
一种方法是使用“BeforeGroups”和“AfterGroups”。让您的测试落在一个组中,然后使用“前/后组”注释为测试做一次安装/解压。
发布于 2014-04-02 09:47:12
我想提出一个懒惰的想法:您可以使用TestListener扩展类,并将tearDown方法放入该类的特定方法(即tearDownListener)中。
在onTestFailure和onTestSuccess中,您可以增加计数器。
当TestListener拦截最后一次测试时,您可以执行tearDownListener。
问候
发布于 2020-08-25 15:30:39
解决方法之一是使用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。
https://stackoverflow.com/questions/22798309
复制相似问题