Skip to content

Favor more locally declared composed annotations over inherited annotations in the TestContext framework [SPR-12749] #17346

Closed
@spring-projects-issues

Description

@spring-projects-issues

David Erickson opened SPR-12749 and commented

Specific case: a test class is annotated with a meta annotation that itself is annotated with a TestExecutionListeners annotation, and the test class also extends a parent class annotated with a TestExecutionListeners annotation (say AbstractJunit4SpringContextTests).

In this case, MetaAnnotationUtils.findAnnotationDescriptor returns a AnnotationDescriptor class that is correct on all of its fields, except for getAnnotationAttributes(), which is incorrectly returning the attributes of the TestExecutionListeners from the parent class, rather than the meta annotation, which is incorrect based on the description of MetaAnnotationUtils.findAnnotationDescriptor:

The algorithm operates as follows:

Search for the annotation on the given class and return a corresponding AnnotationDescriptor if found.
Recursively search through all annotations that the given class declares.
Recursively search through the superclass hierarchy of the given class.

The net result being the test framework does not pick up my declared TestExecutionListeners from the meta annotation any time a parent of the Test class also declares TestExecutionListeners. I added a spring-framework-issues reproducible project to demonstrate the issue.


Affects: 4.1.4

Reference URL: spring-attic/spring-framework-issues#92

Issue Links:

Metadata

Metadata

Assignees

Labels

in: testIssues in the test moduletype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions