如何使用反射列出在“ src / test”路径中带有特定注释的所有方法?

时间:2019-07-16 17:22:56

标签: java annotations

我有两个注释:@Feature和@Scenario。

我在Controller方法中使用了@Feature批注(路径“ src / main / java ...”中的GET / PUT / POST ...)。

我在单元测试(在路径“ src / test / java ...”中的控制器或服务测试)中使用的@Scenario批注。

我需要列出所有带有两个注释的方法,因此我在“ src / main / java ...”路径中创建了一个类。 我能够找到所有带有@Feature注释的方法,但是找不到带有@Scenario注释的方法。 我该怎么办?

我尝试使用Reflections库做到这一点

final Set<Method> features = new Reflections("com.myprefix", new MethodAnnotationsScanner()).getMethodsAnnotatedWith(Feature.class);
final Set<Method> scenarios = new Reflections("com.myprefix", new MethodAnnotationsScanner()).getMethodsAnnotatedWith(Scenario.class);

“功能”返回所有带有@Feature注释的方法,但“场景”返回空

1 个答案:

答案 0 :(得分:0)

您是否尝试编写JUnit测试来解决问题?这是应该适合您的问题的一个:

@Test
public void findMethodsannotatedWith(){
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
    classLoadersList.add(ClasspathHelper.contextClassLoader());
    classLoadersList.add(ClasspathHelper.staticClassLoader());

    Reflections reflections = new Reflections(new ConfigurationBuilder()
        .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner()
            , new MethodAnnotationsScanner())
        .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
        .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("com.myprefix"))));

    final Set<Method> features = reflections.getMethodsAnnotatedWith(Feature.class);
    final Set<Method> scenarios = reflections.getMethodsAnnotatedWith(Scenario.class);
}