Skip to content

Commit 8066aa6

Browse files
committed
Always tears down TestNG cucumber tests.
This ensures that TestNGCucumberRunner.finish() will always be invoked. Fixes #955
1 parent 48a1f03 commit 8066aa6

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

testng/src/main/java/cucumber/api/testng/AbstractTestNGCucumberTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public Object[][] features() {
2929
return testNGCucumberRunner.provideFeatures();
3030
}
3131

32-
@AfterClass
32+
@AfterClass(alwaysRun = true)
3333
public void tearDownClass() throws Exception {
3434
testNGCucumberRunner.finish();
3535
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cucumber.api.testng;
2+
3+
import java.util.Set;
4+
5+
import org.testng.Assert;
6+
import org.testng.TestNG;
7+
import org.testng.annotations.BeforeClass;
8+
import org.testng.annotations.Test;
9+
10+
@Test
11+
public final class AbstractTestNGCucumberTestsTest {
12+
13+
private Set<String> invokedConfigurationMethodNames;
14+
15+
@BeforeClass(alwaysRun = true)
16+
public void setUp() {
17+
InvokedConfigurationMethodListener icml = new InvokedConfigurationMethodListener();
18+
TestNG testNG = new TestNG();
19+
testNG.addListener(icml);
20+
testNG.setGroups("cucumber");
21+
testNG.setTestClasses(new Class[]{new AbstractTestNGCucumberTests() {}.getClass()});
22+
testNG.run();
23+
invokedConfigurationMethodNames = icml.getInvokedMethodNames();
24+
}
25+
26+
@Test
27+
public void setUpClassIsInvoked() {
28+
Assert.assertTrue(invokedConfigurationMethodNames.contains("setUpClass"), "setUpClass must be invoked");
29+
}
30+
31+
@Test
32+
public void teadDownClassIsInvoked() {
33+
Assert.assertTrue(invokedConfigurationMethodNames.contains("tearDownClass"), "tearDownClass must be invoked");
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package cucumber.api.testng;
2+
3+
import java.util.Collections;
4+
import java.util.HashSet;
5+
import java.util.Set;
6+
7+
import org.testng.IInvokedMethod;
8+
import org.testng.IInvokedMethodListener;
9+
import org.testng.ITestResult;
10+
11+
public final class InvokedConfigurationMethodListener implements IInvokedMethodListener {
12+
13+
private Set<String> invokedMethodNames = new HashSet<String>();
14+
15+
@Override
16+
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
17+
}
18+
19+
@Override
20+
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
21+
if (method.isConfigurationMethod()) {
22+
invokedMethodNames.add(method.getTestMethod().getMethodName());
23+
}
24+
}
25+
26+
public Set<String> getInvokedMethodNames() {
27+
return Collections.unmodifiableSet(invokedMethodNames);
28+
}
29+
30+
}

0 commit comments

Comments
 (0)