2013-03-04 82 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驗證具體的解決方案相比,通用的反射在上面的答案,但是這取決於你是什麼真正追求的。說實話,我還不完全理解你的用例。

相關問題