@@ -133,12 +133,21 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte
133
133
registerBeforeEachMethodAdapters (registry );
134
134
registerAfterEachMethodAdapters (registry );
135
135
136
- ContainerExtensionContext containerExtensionContext = new ClassBasedContainerExtensionContext (
136
+ ClassBasedContainerExtensionContext containerExtensionContext = new ClassBasedContainerExtensionContext (
137
137
context .getExtensionContext (), context .getExecutionListener (), this );
138
138
139
+ // Reuse TestInstanceProvider for potential transparent instance caching.
140
+ TestInstanceProvider testInstanceProvider = testInstanceProvider (context , registry , containerExtensionContext );
141
+
142
+ // Eagerly load test instance for BeforeAllCallbacks, if necessary,
143
+ // and store the instance in the ContainerExtensionContext.
144
+ Object testInstance = (this .lifecycle == Lifecycle .PER_CLASS
145
+ ? testInstanceProvider .getTestInstance (Optional .empty ()) : null );
146
+ containerExtensionContext .setTestInstance (testInstance );
147
+
139
148
// @formatter:off
140
149
return context .extend ()
141
- .withTestInstanceProvider (testInstanceProvider ( context , registry , containerExtensionContext ) )
150
+ .withTestInstanceProvider (testInstanceProvider )
142
151
.withExtensionRegistry (registry )
143
152
.withExtensionContext (containerExtensionContext )
144
153
.withThrowableCollector (new ThrowableCollector ())
@@ -214,7 +223,7 @@ private void invokeBeforeAllMethods(JupiterEngineExecutionContext context) {
214
223
ExtensionRegistry registry = context .getExtensionRegistry ();
215
224
ContainerExtensionContext extensionContext = (ContainerExtensionContext ) context .getExtensionContext ();
216
225
ThrowableCollector throwableCollector = context .getThrowableCollector ();
217
- Object testInstance = getTestInstanceForClassLevelCallbacks ( context );
226
+ Object testInstance = extensionContext . getTestInstance (). orElse ( null );
218
227
219
228
for (Method method : this .beforeAllMethods ) {
220
229
throwableCollector .execute (
@@ -229,17 +238,12 @@ private void invokeAfterAllMethods(JupiterEngineExecutionContext context) {
229
238
ExtensionRegistry registry = context .getExtensionRegistry ();
230
239
ContainerExtensionContext extensionContext = (ContainerExtensionContext ) context .getExtensionContext ();
231
240
ThrowableCollector throwableCollector = context .getThrowableCollector ();
232
- Object testInstance = getTestInstanceForClassLevelCallbacks ( context );
241
+ Object testInstance = extensionContext . getTestInstance (). orElse ( null );
233
242
234
243
this .afterAllMethods .forEach (method -> throwableCollector .execute (
235
244
() -> executableInvoker .invoke (method , testInstance , extensionContext , registry )));
236
245
}
237
246
238
- private Object getTestInstanceForClassLevelCallbacks (JupiterEngineExecutionContext context ) {
239
- return this .lifecycle == Lifecycle .PER_CLASS
240
- ? context .getTestInstanceProvider ().getTestInstance (Optional .empty ()) : null ;
241
- }
242
-
243
247
private void invokeAfterAllCallbacks (JupiterEngineExecutionContext context ) {
244
248
ExtensionRegistry registry = context .getExtensionRegistry ();
245
249
ContainerExtensionContext extensionContext = (ContainerExtensionContext ) context .getExtensionContext ();
0 commit comments