我不知道你是否能够从标题中弄清楚我想要做什么,所以我会尝试用例子来解释
让我们假设我已经创建了自己的注释 @VerifySomething
我已经为该注释创建了测试类以确保它有效。
现在让我们假设我有课 SomeClass
与领域 something
带有注释的东西 @VerifySomething
class SomeClass {
@VerifySomething
String something;
}
到目前为止这么好,但现在我想创造 test class
为了我的 SomeClass
但是我没有看到任何关于验证所有测试用例的问题,因为我已经检查过了 @VerifySomething
在测试该注释的类中应该工作,但是我需要确保实际上有一些字段 @VerifySomething
没有复制粘贴所有这些测试用例的注释。
所以我的问题是,有没有办法检查某个字段是否有一个或多个必需的注释,而不编写我已经在注释测试类中编写的测试用例,以确保它按预期工作。
您可以使用 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; }
}
我不确定我是否关注,但是如果您想验证类和/或其属性是否具有给定的Bean Validation约束,您可以使用元数据api。切入点是 验证#getConstraintsForClass(SomeClass.class)。你得到一个 的BeanDescriptor。从那里你可以做_beanDescriptor#getConstraintsForProperty(“something”)给你一个 的PropertyDescriptor。通过 的PropertyDescriptor#getConstraintDescriptors() 你得到一套 ConstraintDescriptors 您可以迭代以验证是否使用了给定的约束注释。
注意,这是一个Bean验证特定的解决方案,与上面的答案中的泛型反射相比,但它取决于你真正追求的是什么。说实话,我还不太了解你的用例。