1 package test.invocationcount; 2 3 import org.testng.TestNG; 4 import org.testng.annotations.Test; 5 6 import java.util.List; 7 8 import test.InvokedMethodNameListener; 9 import test.SimpleBaseTest; 10 11 import static org.assertj.core.api.Assertions.assertThat; 12 13 /** 14 * Test various combination of @BeforeMethod(firstTimeOnly = true/false) and 15 * @AfterMethod(lastTimeOnly = true/false) with invocation counts and data 16 * providers. 17 * @author cbeust@google.com 18 * 19 */ 20 public class FirstAndLastTimeTest extends SimpleBaseTest { 21 @Test verifyDataProviderFalseFalse()22 public void verifyDataProviderFalseFalse() { 23 List<String> invokedMethodNames = run(DataProviderFalseFalseTest.class); 24 25 assertThat(invokedMethodNames).containsExactly( 26 "beforeMethod", "f", "afterMethod", 27 "beforeMethod", "f", "afterMethod", 28 "beforeMethod", "f", "afterMethod" 29 ); 30 } 31 32 @Test verifyDataProviderTrueFalse()33 public void verifyDataProviderTrueFalse() { 34 List<String> invokedMethodNames = run(DataProviderTrueFalseTest.class); 35 36 assertThat(invokedMethodNames).containsExactly( 37 "beforeMethod", "f", "afterMethod", 38 "f", "afterMethod", 39 "f", "afterMethod" 40 ); 41 } 42 43 @Test verifyDataProviderFalseTrue()44 public void verifyDataProviderFalseTrue() { 45 List<String> invokedMethodNames = run(DataProviderFalseTrueTest.class); 46 47 assertThat(invokedMethodNames).containsExactly( 48 "beforeMethod", "f", 49 "beforeMethod", "f", 50 "beforeMethod", "f", "afterMethod" 51 ); 52 } 53 54 @Test verifyDataProviderTrueTrue()55 public void verifyDataProviderTrueTrue() { 56 List<String> invokedMethodNames = run(DataProviderTrueTrueTest.class); 57 58 assertThat(invokedMethodNames).containsExactly( 59 "beforeMethod", "f", 60 "f", 61 "f", "afterMethod" 62 ); 63 } 64 65 @Test verifyInvocationCountFalseFalse()66 public void verifyInvocationCountFalseFalse() { 67 List<String> invokedMethodNames = run(InvocationCountFalseFalseTest.class); 68 69 assertThat(invokedMethodNames).containsExactly( 70 "beforeMethod", "f", "afterMethod", 71 "beforeMethod", "f", "afterMethod", 72 "beforeMethod", "f", "afterMethod" 73 ); 74 } 75 76 @Test verifyInvocationCountTrueFalse()77 public void verifyInvocationCountTrueFalse() { 78 List<String> invokedMethodNames = run(InvocationCountTrueFalseTest.class); 79 80 assertThat(invokedMethodNames).containsExactly( 81 "beforeMethod", "f", "afterMethod", 82 "f", "afterMethod", 83 "f", "afterMethod" 84 ); 85 } 86 87 @Test verifyInvocationCountFalseTrue()88 public void verifyInvocationCountFalseTrue() { 89 List<String> invokedMethodNames = run(InvocationCountFalseTrueTest.class); 90 91 assertThat(invokedMethodNames).containsExactly( 92 "beforeMethod", "f", 93 "beforeMethod", "f", 94 "beforeMethod", "f", "afterMethod" 95 ); 96 } 97 98 @Test verifyInvocationCountTrueTrue()99 public void verifyInvocationCountTrueTrue() { 100 List<String> invokedMethodNames = run(InvocationCountTrueTrueTest.class); 101 102 assertThat(invokedMethodNames).containsExactly( 103 "beforeMethod", "f", 104 "f", 105 "f", "afterMethod" 106 ); 107 } 108 run(Class<?> cls)109 private static List<String> run(Class<?> cls) { 110 TestNG tng = create(cls); 111 InvokedMethodNameListener listener = new InvokedMethodNameListener(); 112 tng.addListener(listener); 113 114 tng.run(); 115 116 return listener.getInvokedMethodNames(); 117 } 118 119 } 120