gpt4 book ai didi

java - 扫描测试类的配置反射

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:49 25 4
gpt4 key购买 nike

使用 Reflections库中,我编写了一个简单的实用程序类,用于索引所有测试方法及其注释。 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 以便它适用于后一种情况?

最佳答案

我找到了一个解决方案。创建 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()));

关于java - 扫描测试类的配置反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com