使用Reflections库,我编写了一个简单的实用程序类,它将所有测试方法及其注释编入索引。思考库帮我这样:
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(packageToIndex))
.filterInputsBy(new FilterBuilder().includePackage(packageToIndex))
.setScanners(
new SubTypesScanner(false),
new TypeAnnotationsScanner(),
new MethodAnnotationsScanner()));
Set testMethods = reflections.getMethodsAnnotatedWith(Test.class);
如果我的实用工具类位于源根(src/main/java
)中,它会按预期找到所有测试方法。
但是,如果它位于测试根(src/test/java
)中,则它找不到测试方法。
我应该如何为Reflections定义ConfigurationBuilder,以便它适用于后一种情况?
答案 0 :(得分:3)
我找到了解决方案。创建ConfigurationBuilder
时,定义以下内容非常重要:
以下是一个示例实现:
URL testClassesURL = Paths.get("target/test-classes").toUri().toURL();
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{testClassesURL},
ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(new ConfigurationBuilder()
.addUrls(ClasspathHelper.forPackage(packageToIndex, classLoader))
.addClassLoader(classLoader)
.filterInputsBy(new FilterBuilder().includePackage(packageToIndex))
.setScanners(
new SubTypesScanner(false),
new TypeAnnotationsScanner(),
new MethodAnnotationsScanner()));