|
41 | 41 | import org.junit.jupiter.params.ParameterizedTest; |
42 | 42 | import org.junit.platform.commons.JUnitException; |
43 | 43 | import org.junit.platform.commons.PreconditionViolationException; |
| 44 | +import org.junit.platform.commons.test.TestClassLoader; |
44 | 45 | import org.junit.platform.commons.util.ReflectionUtils; |
45 | 46 |
|
46 | 47 | /** |
@@ -237,6 +238,31 @@ void providesArgumentsUsingExternalFactoryMethod() { |
237 | 238 | assertThat(arguments).containsExactly(array("string1"), array("string2")); |
238 | 239 | } |
239 | 240 |
|
| 241 | + @Test |
| 242 | + void providesArgumentsUsingExternalFactoryMethodInTypeFromDifferentClassLoader() throws Exception { |
| 243 | + try (var testClassLoader = TestClassLoader.forClasses(TestCase.class, ExternalFactoryMethods.class)) { |
| 244 | + var testClass = testClassLoader.loadClass(TestCase.class.getName()); |
| 245 | + var testMethod = ReflectionUtils.findMethod(testClass, "test").get(); |
| 246 | + var fullyQualifiedMethodName = ExternalFactoryMethods.class.getName() + "#stringsProvider"; |
| 247 | + |
| 248 | + assertThat(testClass.getClassLoader()).isSameAs(testClassLoader); |
| 249 | + |
| 250 | + var arguments = provideArguments(testClass, false, fullyQualifiedMethodName); |
| 251 | + assertThat(arguments).containsExactly(array("string1"), array("string2")); |
| 252 | + |
| 253 | + var factoryMethod = MethodArgumentsProvider.findFactoryMethodByFullyQualifiedName(testClass, testMethod, |
| 254 | + fullyQualifiedMethodName); |
| 255 | + assertThat(factoryMethod).isNotNull(); |
| 256 | + assertThat(factoryMethod.getName()).isEqualTo("stringsProvider"); |
| 257 | + assertThat(factoryMethod.getParameterTypes()).isEmpty(); |
| 258 | + |
| 259 | + var declaringClass = factoryMethod.getDeclaringClass(); |
| 260 | + assertThat(declaringClass.getName()).isEqualTo(ExternalFactoryMethods.class.getName()); |
| 261 | + assertThat(declaringClass).isNotEqualTo(ExternalFactoryMethods.class); |
| 262 | + assertThat(declaringClass.getClassLoader()).isSameAs(testClassLoader); |
| 263 | + } |
| 264 | + } |
| 265 | + |
240 | 266 | @Test |
241 | 267 | void providesArgumentsUsingExternalFactoryMethodWithParentheses() { |
242 | 268 | var arguments = provideArguments(ExternalFactoryMethods.class.getName() + "#stringsProvider()"); |
|
0 commit comments