Skip to content

Commit e5985c0

Browse files
committed
Invoke TestInstancePreDestroyCallbacks in reverse registration order
Prior to this commit, when using PER_CLASS test instance lifecycle semantics, TestInstancePreDestroyCallback extensions were invoked in the order in which they were registered, which violates the general "wrapping" principle for extensions invoked after a container or test. This commit fixes this by invoking TestInstancePreDestroyCallback extensions in reverse registration order when PER_CLASS test instance lifecycle semantics have been configured. Fixes #2209
1 parent ecae6ee commit e5985c0

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-5.6.1.adoc

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ on GitHub.
3131

3232
==== Bug Fixes
3333

34-
* ❓
34+
* `TestInstancePreDestroyCallback` extensions are now invoked in reverse registration
35+
order when `PER_CLASS` test instance lifecycle semantics have been configured.
3536

3637
==== Deprecations and Breaking Changes
3738

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ private void invokeTestInstancePreDestroyCallbacks(JupiterEngineExecutionContext
429429
ExtensionContext extensionContext = context.getExtensionContext();
430430
ThrowableCollector throwableCollector = context.getThrowableCollector();
431431

432-
context.getExtensionRegistry().stream(TestInstancePreDestroyCallback.class).forEach(
432+
context.getExtensionRegistry().getReversedExtensions(TestInstancePreDestroyCallback.class).forEach(
433433
extension -> throwableCollector.execute(() -> extension.preDestroyTestInstance(extensionContext)));
434434
}
435435

junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/TestInstancePreDestroyCallbackTests.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void instancePreDestroyCallbacksInNestedClasses() {
5555
"beforeOuterMethod",
5656
"beforeInnerMethod",
5757
"testInner",
58+
"bazPreDestroyCallbackTestInstance:InnerTestCase",
5859
"barPreDestroyCallbackTestInstance:InnerTestCase",
5960
"fooPreDestroyCallbackTestInstance:InnerTestCase"
6061
);
@@ -77,7 +78,7 @@ void testSpecificTestInstancePreDestroyCallbackIsCalled() {
7778

7879
@Test
7980
void classLifecyclePreDestroyCallbacks() {
80-
executeTestsForClass(PerClassLifecyclePreDestroyCallbackWithTwoTestMethods.class).testEvents()//
81+
executeTestsForClass(PerClassLifecyclePreDestroyCallbacksWithTwoTestMethods.class).testEvents()//
8182
.assertStatistics(stats -> stats.started(2).succeeded(2));
8283

8384
// @formatter:off
@@ -86,7 +87,8 @@ void classLifecyclePreDestroyCallbacks() {
8687
"test1",
8788
"beforeEachMethod",
8889
"test2",
89-
"fooPreDestroyCallbackTestInstance:PerClassLifecyclePreDestroyCallbackWithTwoTestMethods"
90+
"barPreDestroyCallbackTestInstance:PerClassLifecyclePreDestroyCallbacksWithTwoTestMethods",
91+
"fooPreDestroyCallbackTestInstance:PerClassLifecyclePreDestroyCallbacksWithTwoTestMethods"
9092
);
9193
// @formatter:on
9294
}
@@ -118,6 +120,7 @@ void testOuter() {
118120

119121
@Nested
120122
@ExtendWith(BarInstancePreDestroyCallback.class)
123+
@ExtendWith(BazInstancePreDestroyCallback.class)
121124
class InnerTestCase extends Destroyable {
122125

123126
@BeforeEach
@@ -150,7 +153,8 @@ void test() {
150153

151154
@TestInstance(PER_CLASS)
152155
@ExtendWith(FooInstancePreDestroyCallback.class)
153-
static class PerClassLifecyclePreDestroyCallbackWithTwoTestMethods extends Destroyable {
156+
@ExtendWith(BarInstancePreDestroyCallback.class)
157+
static class PerClassLifecyclePreDestroyCallbacksWithTwoTestMethods extends Destroyable {
154158

155159
@BeforeEach
156160
void beforeEachMethod() {
@@ -201,4 +205,11 @@ static class BarInstancePreDestroyCallback extends AbstractTestInstancePreDestro
201205
}
202206
}
203207

208+
static class BazInstancePreDestroyCallback extends AbstractTestInstancePreDestroyCallback {
209+
210+
BazInstancePreDestroyCallback() {
211+
super("baz");
212+
}
213+
}
214+
204215
}

0 commit comments

Comments
 (0)