1package test.interleavedorder; 2 3import org.testng.Assert; 4import org.testng.TestListenerAdapter; 5import org.testng.TestNG; 6import org.testng.annotations.BeforeTest; 7import org.testng.annotations.Test; 8 9import test.BaseTest; 10import testhelper.OutputDirectoryPatch; 11 12import java.util.ArrayList; 13import java.util.List; 14 15 16public class InterleavedInvocationTest extends BaseTest { 17 public static List<String> LOG = new ArrayList<>(); 18 19 @BeforeTest 20 public void beforeTest() { 21 LOG = new ArrayList<>(); 22 } 23 24 private void verifyInvocation(int number, List<String> log, int index) { 25 Assert.assertEquals(log.get(index), "beforeTestChild" + number + "Class"); 26 Assert.assertTrue(("test1".equals(log.get(index + 1)) && "test2".equals(LOG.get(index + 2))) 27 || ("test2".equals(LOG.get(index + 1)) && "test1".equals(LOG.get(index + 2))), 28 "test methods were not invoked correctly"); 29 Assert.assertEquals(log.get(index + 3), "afterTestChild" + number + "Class"); 30 } 31 32 @Test 33 public void invocationOrder() { 34 TestListenerAdapter tla = new TestListenerAdapter(); 35 TestNG testng = new TestNG(); 36 testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory()); 37 testng.setTestClasses(new Class[] { TestChild1.class, TestChild2.class }); 38 testng.addListener(tla); 39 testng.setVerbose(0); 40 testng.run(); 41 42 Assert.assertEquals(LOG.size(), 8, LOG.toString()); 43 int number1 = "beforeTestChild1Class".equals(LOG.get(0)) ? 1 : 2; 44 int number2 = number1 == 1 ? 2 : 1; 45 verifyInvocation(number1, LOG, 0); 46 verifyInvocation(number2, LOG, 4); 47 } 48 49 public static void ppp(String s) { 50 System.out.println("[InterleavedTest] " + s); 51 } 52} 53