为什么不Reflection.getFieldsAnnotatedWith()返回任何字段?

时间:2014-01-23 12:43:03

标签: java unit-testing reflection annotations google-reflections

我遇到Reflections的问题。 我正在尝试使用Set方法获取Reflections#getFieldsAnnotatedWith个字段,但是当我运行单元测试时,它什么也没有返回,有人能告诉我原因吗? (我正在使用IntelliJ IDE

以下是我正在使用的课程,它非常基础。

//The test class run with junit

public class ReflectionTestingTest {

    @Test
    public void test() {
        Reflections ref = new Reflections(AnnotatedClass.class);
        assertEquals(2, ref.getFieldsAnnotatedWith(TestAnnotation.class).size());
        Set<Field> fields = ref.getFieldsAnnotatedWith(TestAnnotation.class);
    }
}

//The class with the annotated fields I want to have in my Set.

public class AnnotatedClass {

    @TestAnnotation
    public int annotatedField1 = 123;

    @TestAnnotation
    public String annotatedField2 = "roar";
}

//And the @interface itself

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TestAnnotation {}

测试失败,并显示以下消息:

junit.framework.AssertionFailedError: 
Expected :2
Actual   :0

1 个答案:

答案 0 :(得分:5)

您的AnnotatedClass字段应注明@TestAnnotation。您的代码将返回 2

public class AnnotatedClass {

    @TestAnnotation
    public int annotatedField1 = 123;

    @TestAnnotation
    public String annotatedField2 = "roar";

}

现在,要查询字段和方法,您需要在创建Reflections对象时指定扫描程序。此外,Reflections的用法应为:

Reflections ref = new Reflections("<specify package name here>", new FieldAnnotationsScanner());