Skip to content

Commit 0fc05e3

Browse files
authored
Merge pull request #25831 from Sgitario/fix_nested_afterall
Fix reuse of instances in Quarkus tests with nested test classes
2 parents 6f056cd + b306d8a commit 0fc05e3

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.quarkus.it.main;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.concurrent.atomic.AtomicInteger;
6+
7+
import org.junit.jupiter.api.BeforeAll;
8+
import org.junit.jupiter.api.Nested;
9+
import org.junit.jupiter.api.Tag;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.TestInstance;
12+
13+
import io.quarkus.test.junit.QuarkusTest;
14+
15+
/**
16+
* Tests {@link Nested} support of {@link QuarkusTest}. Notes:
17+
* <ul>
18+
* <li>to avoid unexpected execution order, don't use surefire's {@code -Dtest=...}, use {@code -Dgroups=nested} instead</li>
19+
* <li>order of nested test classes is reversed by JUnit (and there's no way to enforce a specific order)</li>
20+
* </ul>
21+
*/
22+
@QuarkusTest
23+
@Tag("nested")
24+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
25+
public class QuarkusTestNestedPerClassLifecycleTestCase {
26+
27+
private final AtomicInteger counter = new AtomicInteger(0);
28+
29+
@BeforeAll
30+
public void increment() {
31+
counter.incrementAndGet();
32+
}
33+
34+
@Nested
35+
class NestedTest {
36+
37+
@Test
38+
public void verifyCounter() {
39+
assertEquals(2, counter.incrementAndGet());
40+
}
41+
}
42+
}

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ private void initTestState(ExtensionContext extensionContext, ExtensionState sta
765765
Class<?> outerClass = actualTestClass.getEnclosingClass();
766766
Constructor<?> declaredConstructor = actualTestClass.getDeclaredConstructor(outerClass);
767767
declaredConstructor.setAccessible(true);
768-
if (outerClass.getEnclosingClass() != null) {
768+
if (outerClass.isInstance(actualTestInstance)) {
769769
outerInstances.add(actualTestInstance);
770770
actualTestInstance = declaredConstructor.newInstance(actualTestInstance);
771771
} else {

0 commit comments

Comments
 (0)