Skip to content

Commit 1e72a88

Browse files
committed
feat(testing): Fix @WithConfig to be applied at any level
1 parent 0a8264f commit 1e72a88

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

utils/junit-utils/src/main/java/datadog/trace/junit/utils/config/WithConfigExtension.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.lang.reflect.Constructor;
2020
import java.lang.reflect.Field;
2121
import java.lang.reflect.Modifier;
22+
import java.util.ArrayList;
2223
import java.util.HashMap;
2324
import java.util.List;
2425
import java.util.Map;
@@ -109,12 +110,20 @@ public void afterAll(ExtensionContext context) {
109110
}
110111

111112
private void applyDeclaredConfig(ExtensionContext context) {
112-
// Class-level @WithConfig annotations (supports composed/meta-annotations)
113-
List<WithConfig> classConfigs =
114-
AnnotationSupport.findRepeatableAnnotations(
115-
context.getRequiredTestClass(), WithConfig.class);
116-
for (WithConfig cfg : classConfigs) {
117-
applyConfig(cfg);
113+
// Class-level @WithConfig annotations
114+
// Walk the entire class hierarchy so annotations on superclasses are applied
115+
// (topmost first, then subclass overrides)
116+
Class<?> testClass = context.getRequiredTestClass();
117+
List<Class<?>> hierarchy = new ArrayList<>();
118+
for (Class<?> cls = testClass; cls != null; cls = cls.getSuperclass()) {
119+
hierarchy.add(cls);
120+
}
121+
for (int i = hierarchy.size() - 1; i >= 0; i--) {
122+
List<WithConfig> classConfigs =
123+
AnnotationSupport.findRepeatableAnnotations(hierarchy.get(i), WithConfig.class);
124+
for (WithConfig cfg : classConfigs) {
125+
applyConfig(cfg);
126+
}
118127
}
119128
// Method-level @WithConfig annotations (supports composed/meta-annotations)
120129
context

0 commit comments

Comments
 (0)