1414import static org .junit .jupiter .engine .descriptor .LifecycleMethodUtils .findAfterEachMethods ;
1515import static org .junit .jupiter .engine .descriptor .LifecycleMethodUtils .findBeforeAllMethods ;
1616import static org .junit .jupiter .engine .descriptor .LifecycleMethodUtils .findBeforeEachMethods ;
17+ import static org .junit .jupiter .engine .descriptor .TestInstanceLifecycleUtils .getTestInstanceLifecycle ;
1718import static org .junit .platform .commons .meta .API .Usage .Internal ;
1819
1920import java .lang .reflect .Constructor ;
2425import java .util .Set ;
2526import java .util .function .Function ;
2627
27- import org .junit .jupiter .api .TestInstance ;
2828import org .junit .jupiter .api .TestInstance .Lifecycle ;
2929import org .junit .jupiter .api .extension .AfterAllCallback ;
3030import org .junit .jupiter .api .extension .BeforeAllCallback ;
4040import org .junit .jupiter .engine .extension .ExtensionRegistry ;
4141import org .junit .platform .commons .JUnitException ;
4242import org .junit .platform .commons .meta .API ;
43- import org .junit .platform .commons .util .AnnotationUtils ;
4443import org .junit .platform .commons .util .Preconditions ;
4544import org .junit .platform .commons .util .ReflectionUtils ;
4645import org .junit .platform .engine .TestDescriptor ;
@@ -65,7 +64,6 @@ public class ClassTestDescriptor extends JupiterTestDescriptor {
6564 private static final ExecutableInvoker executableInvoker = new ExecutableInvoker ();
6665
6766 private final Class <?> testClass ;
68- private final Lifecycle lifecycle ;
6967
7068 private List <Method > beforeAllMethods ;
7169 private List <Method > afterAllMethods ;
@@ -83,7 +81,6 @@ protected ClassTestDescriptor(UniqueId uniqueId, Function<Class<?>, String> defa
8381 defaultDisplayNameGenerator ), new ClassSource (testClass ));
8482
8583 this .testClass = testClass ;
86- this .lifecycle = getTestInstanceLifecycle (testClass );
8784 }
8885
8986 // --- TestDescriptor ------------------------------------------------------
@@ -117,8 +114,10 @@ private static String generateDefaultDisplayName(Class<?> testClass) {
117114
118115 @ Override
119116 public JupiterEngineExecutionContext prepare (JupiterEngineExecutionContext context ) {
120- this .beforeAllMethods = findBeforeAllMethods (testClass , this .lifecycle == Lifecycle .PER_METHOD );
121- this .afterAllMethods = findAfterAllMethods (testClass , this .lifecycle == Lifecycle .PER_METHOD );
117+ Lifecycle lifecycle = getTestInstanceLifecycle (testClass , context .getConfigurationParameters ());
118+
119+ this .beforeAllMethods = findBeforeAllMethods (testClass , lifecycle == Lifecycle .PER_METHOD );
120+ this .afterAllMethods = findAfterAllMethods (testClass , lifecycle == Lifecycle .PER_METHOD );
122121 this .beforeEachMethods = findBeforeEachMethods (testClass );
123122 this .afterEachMethods = findAfterEachMethods (testClass );
124123
@@ -134,7 +133,7 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte
134133
135134 // @formatter:off
136135 return context .extend ()
137- .withTestInstanceProvider (testInstanceProvider (context , registry , extensionContext ))
136+ .withTestInstanceProvider (testInstanceProvider (context , registry , extensionContext , lifecycle ))
138137 .withExtensionRegistry (registry )
139138 .withExtensionContext (extensionContext )
140139 .withThrowableCollector (throwableCollector )
@@ -168,9 +167,9 @@ public void after(JupiterEngineExecutionContext context) throws Exception {
168167 }
169168
170169 private TestInstanceProvider testInstanceProvider (JupiterEngineExecutionContext parentExecutionContext ,
171- ExtensionRegistry registry , ClassExtensionContext extensionContext ) {
170+ ExtensionRegistry registry , ClassExtensionContext extensionContext , Lifecycle lifecycle ) {
172171
173- if (this . lifecycle == Lifecycle .PER_CLASS ) {
172+ if (lifecycle == Lifecycle .PER_CLASS ) {
174173 // Eagerly load test instance for BeforeAllCallbacks, if necessary,
175174 // and store the instance in the ExtensionContext.
176175 Object instance = instantiateAndPostProcessTestInstance (parentExecutionContext , extensionContext , registry );
@@ -283,20 +282,11 @@ private AfterEachMethodAdapter synthesizeAfterEachMethodAdapter(Method method) {
283282 }
284283
285284 private void invokeMethodInExtensionContext (Method method , ExtensionContext context , ExtensionRegistry registry ) {
286-
287285 Object testInstance = context .getRequiredTestInstance ();
288286 testInstance = ReflectionUtils .getOutermostInstance (testInstance , method .getDeclaringClass ()).orElseThrow (
289287 () -> new JUnitException ("Failed to find instance for method: " + method .toGenericString ()));
290288
291289 executableInvoker .invoke (method , testInstance , context , registry );
292290 }
293291
294- private static TestInstance .Lifecycle getTestInstanceLifecycle (Class <?> testClass ) {
295- // @formatter:off
296- return AnnotationUtils .findAnnotation (testClass , TestInstance .class )
297- .map (TestInstance ::value )
298- .orElse (Lifecycle .PER_METHOD );
299- // @formatter:on
300- }
301-
302292}
0 commit comments