2013-03-04 78 views
8

,如果你设法弄清楚什么,我试图从标题就是这样做的,我会尝试用例如确定字段是否标注有一个给定的注解

解释我不知道让我们假设我有创建了自己的注解@VerifySomething

而且我已经创建了测试类为注释,以确保它的工作原理。

现在让我们假设我有SomeClass类与注释@VerifySomething

class SomeClass { 
    @VerifySomething 
    String something; 
} 

到目前为止好anoted场something,但现在我要为我的SomeClass创建test class但我看不出任何一点验证的东西全部测试用例,因为我已经检查了@VerifySomething的作品,因为它应该在类测试是注释,但是我需要确保这一领域的东西其实有@VerifySomething注释没有拷贝粘贴所有这些测试用例。

所以我的问题是,有没有办法来检查,如果一些领域有一个或多个必需的注释,而无需编写测试用例,我已经写在注释测试类,以确保它的作品,因为它应该。

回答

11

您可以使用getAnnotation,以确定是否有在球场上,这需要注释类为参数的具体注释:

field.getAnnotation(SomeAnnotation.class); 

这里是你可以用它来验证一个类有一个方法现场给出注解:

import java.lang.reflect.Field; 
import javax.validation.constraints.NotNull; 
import org.junit.Test; 
import org.springframework.util.Assert; 

public class TestHasAnnotatedField { 
    @Test 
    public void testHasFieldsWithAnnotation() throws SecurityException, NoSuchFieldException { 
     Class<?>[] classesToVerify = new Class[] {MyClass1.class, MyClass2.class}; 
     for (Class<?> clazz : classesToVerify) { 
      Field field = clazz.getDeclaredField("something"); 
      Assert.notNull(field.getAnnotation(NotNull.class)); 
     } 
    } 
    static class MyClass1 { @NotNull String something; } 
    static class MyClass2 { @NotNull String something; } 
} 
2

我不知道我下面,但如果你想验证一个类或它的属性是否具有给定Bean验证约束,则可以使用元数据API。入口点是Validator#getConstraintsForClass(SomeClass.class)。你得到一个BeanDescriptor。从那里,你可以做_beanDescriptor#getConstraintsForProperty(“东西”),它给你一个的PropertyDescriptor。通过的PropertyDescriptor#getConstraintDescriptors()你然后是一组ConstraintDescriptors您可以迭代,以验证是否使用给定的约束注解。

注意,这是一个Bean验证具体的解决方案相比,通用的反射在上面的答案,但是这取决于你是什么真正追求的。说实话,我还不完全理解你的用例。

相关问题