package test.testng674; import org.testng.Assert; import org.testng.ITestNGListener; import org.testng.TestNG; import org.testng.annotations.Test; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.SimpleBaseTest; public class BeforeClassSkipExceptionTest extends SimpleBaseTest { @Test public void testIfTestMethodHasException() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); createTestNGInstanceAndRun(reporter, TestClassSampleContainer.SampleClassWithFailingBeforeClassMethod.class); } @Test public void testIfTestMethodHasExceptionInInheritance() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); createTestNGInstanceAndRun(reporter, TestClassSampleContainer.ChildClass.class); } @Test public void testExceptionDetailsWhenClassHasMultipleFailures() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); createTestNGInstanceAndRun(reporter, TestClassSampleContainer.SampleClassWithMultipleFailures.class); } @Test public void testExceptionDetailsWhenClassHasExplicitSkipInConfiguration() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); createTestNGInstanceAndRun(reporter, TestClassSampleContainer.SampleClassWithExplicitConfigSkip.class); } @Test public void testExceptionDetailsWhenConfigHasAlwaysRun() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); createTestNGInstanceAndRun(reporter, TestClassSampleContainer.SampleClassWithMultipleFailuresAndAlwaysRun .class); } @Test public void testExceptionDetailsUsingGroupsWithFailures() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); Class<?>[] classes = { TestClassSampleContainer.GroupsContainer.GroupA.class, TestClassSampleContainer.GroupsContainer.GroupB.class }; createTestNGInstanceAndRun(reporter, 2, true, classes); } @Test public void testExceptionDetailsWhenFailuresExistInSuiteConfigs() { XmlSuite xmlSuite = createXmlSuite("Suite"); XmlTest xmlTest1 = createXmlTest(xmlSuite, "Test1"); createXmlClass(xmlTest1, TestClassSampleContainer.SuiteFailureTestClass.class); XmlTest xmlTest2 = createXmlTest(xmlSuite, "Test2"); createXmlClass(xmlTest2, TestClassSampleContainer.RegularTestClass.class); TestNG tng = create(xmlSuite); ReportingListenerFor674 reporter = new ReportingListenerFor674(); tng.addListener((ITestNGListener) reporter); tng.run(); Assert.assertEquals(reporter.getErrors().size(), 2); for (Throwable error : reporter.getErrors()) { Assert.assertEquals(error.getMessage(), TestClassSampleContainer.ERROR_MSG); Assert.assertTrue(error instanceof RuntimeException); } } @Test public void testExceptionDetailsWhenFailuresExistInABaseClass() { ReportingListenerFor674 reporter = new ReportingListenerFor674(); Class<?>[] classes = { TestClassSampleContainer.A.class, TestClassSampleContainer.B.class }; createTestNGInstanceAndRun(reporter, 2, false, classes); } private static void createTestNGInstanceAndRun(ReportingListenerFor674 reporter, Class<?>... clazz) { createTestNGInstanceAndRun(reporter, 1, false, clazz); } private static void createTestNGInstanceAndRun(ReportingListenerFor674 reporter, int expectedCount, boolean useGroups, Class<?>... clazzes) { XmlSuite xmlSuite = createXmlSuite("Suite"); XmlTest xmlTest = createXmlTest(xmlSuite, "Test"); if (useGroups) { xmlTest.addIncludedGroup("foo"); } for (Class<?> clazz : clazzes) { createXmlClass(xmlTest, clazz); } TestNG tng = create(xmlSuite); tng.addListener((ITestNGListener) reporter); tng.run(); Assert.assertEquals(reporter.getErrors().size(), expectedCount); for (Throwable error : reporter.getErrors()) { Assert.assertEquals(error.getMessage(), TestClassSampleContainer.ERROR_MSG); Assert.assertTrue(error instanceof RuntimeException); } } }