package test.configuration; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class MethodCallOrderTest { public static boolean s_beforeSuite; public static boolean s_beforeTest; public static boolean s_beforeClass; public static boolean s_beforeMethod; @BeforeClass public void beforeClass() { assertTrue(s_beforeSuite); assertTrue(s_beforeTest); assertFalse(s_beforeClass); assertFalse(s_beforeMethod); s_beforeClass = true; } @AfterSuite public void cleanUp() { s_beforeSuite = false; s_beforeTest = false; s_beforeClass = false; s_beforeMethod = false; } @BeforeMethod public void beforeMethod() { assertTrue(s_beforeSuite); assertTrue(s_beforeTest); assertTrue(s_beforeClass); assertFalse(s_beforeMethod); s_beforeMethod = true; } @Test public void realTest() { assertTrue(s_beforeSuite); assertTrue(s_beforeTest); assertTrue(s_beforeClass); assertTrue(s_beforeMethod); } @AfterMethod public void afterMethod() { assertFalse(ExternalConfigurationClass.s_afterMethod, "afterTestMethod shouldn't have been run"); assertFalse(ExternalConfigurationClass.s_afterClass, "afterTestClass shouldn't have been run"); assertFalse(ExternalConfigurationClass.s_afterTest, "afterTest should haven't been run"); ExternalConfigurationClass.s_afterMethod = true; } @AfterClass public void afterClass() { assertTrue(ExternalConfigurationClass.s_afterMethod, "afterTestMethod should have been run"); assertFalse(ExternalConfigurationClass.s_afterClass, "afterTestClass shouldn't have been run"); assertFalse(ExternalConfigurationClass.s_afterTest, "afterTest should haven't been run"); ExternalConfigurationClass.s_afterClass = true; } }