From ce850a583c98f0b85162825534fb0c150b8a1fcc Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Mon, 1 Aug 2022 13:07:40 +0300 Subject: [PATCH] Support overloaded test methods in CompileWithTargetClassAccessExtension 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 --- ...CompileWithTargetClassAccessExtension.java | 26 +++---------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/spring-core-test/src/main/java/org/springframework/aot/test/generator/compile/CompileWithTargetClassAccessExtension.java b/spring-core-test/src/main/java/org/springframework/aot/test/generator/compile/CompileWithTargetClassAccessExtension.java index ec83f46acf8..560f4402d50 100644 --- a/spring-core-test/src/main/java/org/springframework/aot/test/generator/compile/CompileWithTargetClassAccessExtension.java +++ b/spring-core-test/src/main/java/org/springframework/aot/test/generator/compile/CompileWithTargetClassAccessExtension.java @@ -28,9 +28,7 @@ import org.junit.platform.launcher.core.LauncherFactory; 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; @@ -121,20 +119,18 @@ class CompileWithTargetClassAccessExtension implements InvocationInterceptor { 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(); @@ -146,20 +142,6 @@ class CompileWithTargetClassAccessExtension implements InvocationInterceptor { } } - 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 {