Skip to content

Commit

Permalink
Support overloaded test methods in CompileWithTargetClassAccessExtension
Browse files Browse the repository at this point in the history
Prior to this commit, CompileWithTargetClassAccessExtension failed to
properly select overloaded test methods because it ignored the method
parameter list when looking up the test method.

This commit addresses this issue by selecting the test method using its
fully qualified method name which takes in account the class name,
method name, and parameter names.

Closes gh-28901
  • Loading branch information
sbrannen committed Aug 1, 2022
1 parent 8fb27c3 commit ce850a5
Showing 1 changed file with 4 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
import org.junit.platform.launcher.listeners.TestExecutionSummary;

import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;

import static org.junit.platform.commons.util.ReflectionUtils.getFullyQualifiedMethodName;
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectMethod;
import static org.junit.platform.launcher.EngineFilter.includeEngines;

Expand Down Expand Up @@ -121,20 +119,18 @@ private void runTestWithModifiedClassPath(
testClass.getClassLoader());
Thread.currentThread().setContextClassLoader(forkedClassPathClassLoader);
try {
runTest(forkedClassPathClassLoader, testClass.getName(), testMethod.getName());
runTest(forkedClassPathClassLoader, testClass, testMethod);
}
finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
}

private void runTest(ClassLoader classLoader, String testClassName, String testMethodName)
private void runTest(ClassLoader classLoader, Class<?> testClass, Method testMethod)
throws Throwable {

Class<?> testClass = classLoader.loadClass(testClassName);
Method testMethod = findMethod(testClass, testMethodName);
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectMethod(testClass, testMethod))
.selectors(selectMethod(getFullyQualifiedMethodName(testClass, testMethod)))
.filters(includeEngines("junit-jupiter"))
.build();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
Expand All @@ -146,20 +142,6 @@ private void runTest(ClassLoader classLoader, String testClassName, String testM
}
}

private Method findMethod(Class<?> testClass, String testMethodName) {
Method method = ReflectionUtils.findMethod(testClass, testMethodName);
if (method == null) {
Method[] methods = ReflectionUtils.getUniqueDeclaredMethods(testClass);
for (Method candidate : methods) {
if (candidate.getName().equals(testMethodName)) {
return candidate;
}
}
}
Assert.state(method != null, () -> "Unable to find " + testClass + "." + testMethodName);
return method;
}


@FunctionalInterface
interface Action {
Expand Down

0 comments on commit ce850a5

Please sign in to comment.