io.cucumber.testng.AbstractTestNGCucumberTests Maven / Gradle / Ivy
package io.cucumber.testng;
import org.apiguardian.api.API;
import org.testng.ITestContext;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.xml.XmlTest;
/**
* Abstract TestNG Cucumber Test
*
* Runs each cucumber scenario found in the features as separated test.
*
* @see TestNGCucumberRunner
*/
@API(status = API.Status.STABLE)
public abstract class AbstractTestNGCucumberTests {
private TestNGCucumberRunner testNGCucumberRunner;
@BeforeClass(alwaysRun = true)
public void setUpClass(ITestContext context) {
XmlTest currentXmlTest = context.getCurrentXmlTest();
CucumberPropertiesProvider properties = currentXmlTest::getParameter;
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass(), properties);
}
@SuppressWarnings("unused")
@Test(groups = "cucumber", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
public void runScenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) {
// the 'featureWrapper' parameter solely exists to display the feature
// file in a test report
testNGCucumberRunner.runScenario(pickleWrapper.getPickle());
}
/**
* Returns two dimensional array of {@link PickleWrapper}s with their
* associated {@link FeatureWrapper}s.
*
* @return a two dimensional array of scenarios features.
*/
@DataProvider
public Object[][] scenarios() {
if (testNGCucumberRunner == null) {
return new Object[0][0];
}
return testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() {
if (testNGCucumberRunner == null) {
return;
}
testNGCucumberRunner.finish();
}
}