Status Quo

While switching the default @NestedTestConfiguration mode to INHERIT in fbb3c5cce73f07679afebbb39980fb971efb9f4f, I noticed that @NestedTestConfiguration was discovered on an enclosing class for a nested interface if a @Nested test class implemented the nested interface.

If the nested interface is local to a test class that is itself annotated with @NestedTestConfiguration, the search algorithm in MetaAnnotationUtils.lookUpEnclosingConfiguration() will find that annotation before declarations more local to the @Nested test class, and that annotation may be declared differently than a local declaration.

As a workaround, developers can redeclare @NestedTestConfiguration with the desired mode directly on a @Nested test class that implements such an interface, but that is cumbersome and error prone.

Analysis

This bug originates from use of SearchStrategy.TYPE_HIERARCHY_AND_ENCLOSING_CLASSES in the MergedAnnotations API. To fix this bug, a custom annotation search algorithm will have to be used, analogous to other search algorithms recently introduced in MetaAnnotationUtils.

Deliverables

  • [x] Ensure that MetaAnnotationUtils.lookUpEnclosingConfiguration() does not search on enclosing classes for nested interfaces.