Skip to content

Commit 4f62f13

Browse files
committed
Ignore MethodSelectors for non-Jupiter classes
1 parent 3e7aa8d commit 4f62f13

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-5.7.0-M1.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ on GitHub.
4343

4444
==== Bug Fixes
4545

46-
* ❓
46+
* The Jupiter engine now ignores `MethodSelectors` for methods in non-Jupiter test
47+
classes instead of failing for missing methods in such cases.
4748

4849
==== Deprecations and Breaking Changes
4950

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/MethodSelectorResolver.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor;
3636
import org.junit.jupiter.engine.descriptor.TestTemplateInvocationTestDescriptor;
3737
import org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor;
38+
import org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass;
39+
import org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests;
3840
import org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod;
3941
import org.junit.jupiter.engine.discovery.predicates.IsTestMethod;
4042
import org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod;
@@ -57,6 +59,8 @@ class MethodSelectorResolver implements SelectorResolver {
5759

5860
private static final Logger logger = LoggerFactory.getLogger(MethodSelectorResolver.class);
5961
private static final MethodFinder methodFinder = new MethodFinder();
62+
private static final Predicate<Class<?>> testClassPredicate = new IsTestClassWithTests().or(
63+
new IsNestedTestClass());
6064

6165
protected final JupiterConfiguration configuration;
6266

@@ -66,15 +70,20 @@ class MethodSelectorResolver implements SelectorResolver {
6670

6771
@Override
6872
public Resolution resolve(MethodSelector selector, Context context) {
69-
return resolve(context, emptyList(), selector.getJavaClass(), selector.getJavaMethod());
73+
return resolve(context, emptyList(), selector.getJavaClass(), selector::getJavaMethod);
7074
}
7175

7276
@Override
7377
public Resolution resolve(NestedMethodSelector selector, Context context) {
74-
return resolve(context, selector.getEnclosingClasses(), selector.getNestedClass(), selector.getMethod());
78+
return resolve(context, selector.getEnclosingClasses(), selector.getNestedClass(), selector::getMethod);
7579
}
7680

77-
private Resolution resolve(Context context, List<Class<?>> enclosingClasses, Class<?> testClass, Method method) {
81+
private Resolution resolve(Context context, List<Class<?>> enclosingClasses, Class<?> testClass,
82+
Supplier<Method> methodSupplier) {
83+
if (!testClassPredicate.test(testClass)) {
84+
return unresolved();
85+
}
86+
Method method = methodSupplier.get();
7887
// @formatter:off
7988
Set<Match> matches = Arrays.stream(MethodType.values())
8089
.map(methodType -> methodType.resolve(enclosingClasses, testClass, method, context, configuration))

junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/discovery/DiscoverySelectorResolverTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,15 @@ void nonTestClassResolution() {
108108
assertTrue(engineDescriptor.getDescendants().isEmpty());
109109
}
110110

111+
@Test
112+
void doesNotAttemptToResolveMethodsForNonTestClasses() {
113+
var methodSelector = selectMethod(NonTestClass.class, "doesNotExist");
114+
resolve(request().selectors(methodSelector));
115+
116+
assertTrue(engineDescriptor.getDescendants().isEmpty());
117+
assertUnresolved(methodSelector);
118+
}
119+
111120
@Test
112121
void abstractClassResolution() {
113122
resolve(request().selectors(selectClass(AbstractTestClass.class)));

0 commit comments

Comments
 (0)