Skip to content

Commit

Permalink
configfailurepolicy=continue only works for BeforeTest when using Tes…
Browse files Browse the repository at this point in the history
…tNG XML file

Fixes testng-team#2731
  • Loading branch information
bj-9527 committed Mar 1, 2022
1 parent 0438740 commit a30dc42
Show file tree
Hide file tree
Showing 9 changed files with 278 additions and 87 deletions.
1 change: 1 addition & 0 deletions CHANGES.txt
@@ -1,5 +1,6 @@
Current
7.6.0
Fixed: GITHUB-2731: configfailurepolicy=continue only works for BeforeTest when using TestNG XML file (Nan Liang)
Fixed: GITHUB-2729: beforeConfiguration() listener method should be invoked for skipped configurations as well(Nan Liang)
Fixed: assertEqualsNoOrder for Collection and Iterators size check was missing (Adam Kaczmarek)
Fixed: GITHUB-2709: Testnames not working together with suites in suite (Martin Aldrin)
Expand Down
Expand Up @@ -274,7 +274,8 @@ public void invokeConfigurations(ConfigMethodArguments arguments) {
tm.getGroups(),
arguments.getTestClass(),
arguments.getInstance())
&& !alwaysRun) {
&& !alwaysRun
&& !m_continueOnFailedConfiguration) {
log(3, "Skipping " + Utils.detailedMethodName(tm, true));
InvokedMethod invokedMethod = new InvokedMethod(System.currentTimeMillis(), testResult);
runConfigurationListeners(testResult, arguments.getTestMethod(), true /* before */);
Expand Down
Expand Up @@ -597,7 +597,8 @@ private ITestResult invokeMethod(
arguments.getTestMethod(),
arguments.getTestMethod().getGroups(),
arguments.getTestClass(),
arguments.getInstance())) {
arguments.getInstance())
&& suite.getConfigFailurePolicy() == XmlSuite.FailurePolicy.SKIP) {
Throwable exception =
ExceptionUtils.getExceptionDetails(m_testContext, arguments.getInstance());
ITestResult result =
Expand Down
@@ -0,0 +1,182 @@
package test.configurationfailurepolicy;

import org.testng.ITestContext;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.xml.XmlSuite;
import test.configurationfailurepolicy.issue2731.ConfigFailTestSample;
import testhelper.OutputDirectoryPatch;

import static org.testng.Assert.assertEquals;
import static test.SimpleBaseTest.getPathToResource;

public class FailureContinuePolicyTest {
// only if this is run from an xml file that sets this on the suite
@BeforeClass(enabled = false)
public void setupClass(ITestContext testContext) {
assertEquals(
testContext.getSuite().getXmlSuite().getConfigFailurePolicy(),
XmlSuite.FailurePolicy.CONTINUE);
}

@DataProvider(name = "dp")
public Object[][] getData() {
return new Object[][] {
// params - confFail, confSkip, skippedTests
new Object[] {new Class[] {ClassWithFailedBeforeClassMethod.class}, 1, 0, 0},
new Object[] {new Class[] {ClassWithFailedBeforeClassMethodAndAfterClass.class}, 1, 0, 0},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleTests.class}, 2, 0, 0},
new Object[] {
new Class[] {ClassWithFailedBeforeClassMethodAndBeforeMethodAfterMethodAfterClass.class},
1,
0,
0
},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleInvocations.class}, 4, 0, 0},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeMethod.class}, 2, 0, 0},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeClassMethod.class}, 1, 0, 0},
new Object[] {
new Class[] {
ClassWithFailedBeforeClassMethod.class, ExtendsClassWithFailedBeforeClassMethod.class
},
2,
0,
0
},
new Object[] {new Class[] {ClassWithSkippingBeforeMethod.class}, 0, 1, 0},
new Object[] {new Class[] {FactoryClassWithFailedBeforeMethod.class}, 2, 0, 0},
new Object[] {
new Class[] {FactoryClassWithFailedBeforeMethodAndMultipleInvocations.class}, 8, 0, 0
},
new Object[] {new Class[] {FactoryClassWithFailedBeforeClassMethod.class}, 2, 0, 0},
new Object[] {new Class[] {ConfigFailTestSample.class}, 4, 0, 0}
};
}

@Test(dataProvider = "dp")
public void confFailureTest(
Class[] classesUnderTest,
int configurationFailures,
int configurationSkips,
int skippedTests) {

TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory());
testng.setTestClasses(classesUnderTest);
testng.addListener(tla);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
testng.run();

verify(tla, configurationFailures, configurationSkips, skippedTests);
}

@Test
public void confFailureTestInvolvingGroups() {
Class[] classesUnderTest =
new Class[] {ClassWithFailedBeforeClassMethodAndBeforeGroupsAfterClassAfterGroups.class};

TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory());
testng.setTestClasses(classesUnderTest);
testng.addListener(tla);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
testng.setGroups("group1");
testng.run();
verify(tla, 1, 0, 0);
}

@Test
public void commandLineTest_policyAsSkip() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
"-testclass",
ClassWithFailedBeforeMethodAndMultipleTests.class.getCanonicalName()
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 1, 1, 2);
}

@Test
public void commandLineTest_policyAsContinue() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"continue",
"-testclass",
ClassWithFailedBeforeMethodAndMultipleTests.class.getCanonicalName()
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 2, 0, 0);
}

@Test
public void commandLineTestWithXMLFile_policyAsSkip() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
getPathToResource("testng-configfailure.xml")
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 1, 1, 2);
}

@Test
public void commandLineTestWithXMLFile_policyAsContinue() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"continue",
getPathToResource("testng-configfailure.xml")
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 2, 0, 0);
}

private void verify(
TestListenerAdapter tla,
int configurationFailures,
int configurationSkips,
int skippedTests) {
assertEquals(
tla.getConfigurationFailures().size(),
configurationFailures,
"wrong number of configuration failures");
assertEquals(
tla.getConfigurationSkips().size(),
configurationSkips,
"wrong number of configuration skips");
assertEquals(tla.getSkippedTests().size(), skippedTests, "wrong number of skipped tests");
}
}
Expand Up @@ -10,6 +10,7 @@
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.xml.XmlSuite;
import test.configurationfailurepolicy.issue2731.ConfigFailTestSample;
import testhelper.OutputDirectoryPatch;

public class FailurePolicyTest {
Expand All @@ -19,39 +20,39 @@ public class FailurePolicyTest {
public void setupClass(ITestContext testContext) {
assertEquals(
testContext.getSuite().getXmlSuite().getConfigFailurePolicy(),
XmlSuite.FailurePolicy.CONTINUE);
XmlSuite.FailurePolicy.SKIP);
}

@DataProvider(name = "dp")
public Object[][] getData() {
return new Object[][] {
// params - confFail, confSkip, skippedTests
new Object[] {new Class[] {ClassWithFailedBeforeClassMethod.class}, 1, 1, 1},
new Object[] {new Class[] {ClassWithFailedBeforeClassMethodAndAfterClass.class}, 1, 1, 1},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleTests.class}, 2, 0, 2},
new Object[] {
new Class[] {ClassWithFailedBeforeClassMethodAndBeforeMethodAfterMethodAfterClass.class},
1,
3,
1
},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleInvocations.class}, 4, 0, 4},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeMethod.class}, 2, 2, 2},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeClassMethod.class}, 1, 2, 2},
new Object[] {
new Class[] {
ClassWithFailedBeforeClassMethod.class, ExtendsClassWithFailedBeforeClassMethod.class
// params - confFail, confSkip, skippedTests
new Object[] {new Class[] {ClassWithFailedBeforeClassMethod.class}, 1, 1, 1},
new Object[] {new Class[] {ClassWithFailedBeforeClassMethodAndAfterClass.class}, 1, 1, 1},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleTests.class}, 2, 0, 2},
new Object[] {
new Class[] {ClassWithFailedBeforeClassMethodAndBeforeMethodAfterMethodAfterClass.class},
1,
3,
1
},
2,
3,
3
},
new Object[] {new Class[] {ClassWithSkippingBeforeMethod.class}, 0, 1, 1},
new Object[] {new Class[] {FactoryClassWithFailedBeforeMethod.class}, 2, 0, 2},
new Object[] {
new Class[] {FactoryClassWithFailedBeforeMethodAndMultipleInvocations.class}, 8, 0, 8
},
new Object[] {new Class[] {FactoryClassWithFailedBeforeClassMethod.class}, 2, 2, 2},
new Object[] {new Class[] {ClassWithFailedBeforeMethodAndMultipleInvocations.class}, 4, 0, 4},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeMethod.class}, 2, 2, 2},
new Object[] {new Class[] {ExtendsClassWithFailedBeforeClassMethod.class}, 1, 2, 2},
new Object[] {
new Class[] {
ClassWithFailedBeforeClassMethod.class, ExtendsClassWithFailedBeforeClassMethod.class
},
2,
3,
3
},
new Object[] {new Class[] {ClassWithSkippingBeforeMethod.class}, 0, 1, 1},
new Object[] {new Class[] {FactoryClassWithFailedBeforeMethod.class}, 2, 0, 2},
new Object[] {
new Class[] {FactoryClassWithFailedBeforeMethodAndMultipleInvocations.class}, 8, 0, 8
},
new Object[] {new Class[] {FactoryClassWithFailedBeforeClassMethod.class}, 2, 2, 2},
};
}

Expand All @@ -67,7 +68,7 @@ public void confFailureTest(
testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory());
testng.setTestClasses(classesUnderTest);
testng.addListener(tla);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.SKIP);
testng.run();

verify(tla, configurationFailures, configurationSkips, skippedTests);
Expand All @@ -83,7 +84,7 @@ public void confFailureTestInvolvingGroups() {
testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory());
testng.setTestClasses(classesUnderTest);
testng.addListener(tla);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
testng.setConfigFailurePolicy(XmlSuite.FailurePolicy.SKIP);
testng.setGroups("group1");
testng.run();
verify(tla, 1, 3, 1);
Expand All @@ -93,76 +94,39 @@ public void confFailureTestInvolvingGroups() {
public void commandLineTest_policyAsSkip() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
"-testclass",
ClassWithFailedBeforeMethodAndMultipleTests.class.getCanonicalName()
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
"-testclass",
ClassWithFailedBeforeMethodAndMultipleTests.class.getCanonicalName()
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 1, 1, 2);
}

@Test
public void commandLineTest_policyAsContinue() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"continue",
"-testclass",
ClassWithFailedBeforeMethodAndMultipleTests.class.getCanonicalName()
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 2, 0, 2);
}

@Test
public void commandLineTestWithXMLFile_policyAsSkip() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
getPathToResource("testng-configfailure.xml")
new String[]{
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"skip",
getPathToResource("testng-configfailure.xml")
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 1, 1, 2);
}

@Test
public void commandLineTestWithXMLFile_policyAsContinue() {
String[] argv =
new String[] {
"-log",
"0",
"-d",
OutputDirectoryPatch.getOutputDirectory(),
"-configfailurepolicy",
"continue",
getPathToResource("testng-configfailure.xml")
};
TestListenerAdapter tla = new TestListenerAdapter();
TestNG.privateMain(argv, tla);

verify(tla, 2, 0, 2);
}

private void verify(
TestListenerAdapter tla,
int configurationFailures,
Expand Down

0 comments on commit a30dc42

Please sign in to comment.