2015-08-21 40 views
2

如何測試從DB中的表生成的實體中註釋的完整性。 我想要做的是測試是否有註釋,並檢查它們是否正確填寫,如使用對象數據類型而不是變量例如。(整數而不是int)。檢查是否使用日曆類型而不是日期類型。如何使用JUnit反射測試實體註釋

目前我可以創建這些表和手動分配註釋,比如:

@Entity 
    @Id, 
    @GeneratedValue(), 
    @Column(name="columnName"), 
    @Size(min = 1, max =20, message = "{ClassName.variableName.messageType"}), 
    @NotNull(message = "{ClassName.variableName.messageType"}), 
    @Temporal(TemporalType.DATE)...  

在那裏我試圖解決的部分是,我需要檢查thesees註釋,如誠信,如果他們充滿適當地或甚至在那裏。 ,我必須要測試的代碼是:

@Log 
    @Entity 
    @Table(name = "Notes") 
    @NamedQueries({ 
    @NamedQuery(name = "Note.findAll", query = "SELECT n FROM Note n") }) 
    public class Note implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(generator = "myGen") 
@Column(name = "ID") 
private String id; 

@Column(name = "NOTE_OWNER") 
@Size(min = 0, max = 20, message = "{Notes.owner.Invalid}") 
private String owner; 

@Column(name = "NOTE_CAPTION") 
@Size(min = 0, max = 255, message = "{Notes.caption.Invalid}") 
private String caption;   
+0

你爲什麼不簡單的集成測試,只需用它來訪問數據庫全班?通過這種方式,您可以驗證註釋是否按預期工作,而無需親自解析註釋... –

+0

感謝您的答覆,其想法是進行單元測試,以強制創建新的類,以便正確設置註釋。而不是爲創建的每個新類創建一個測試類。 Regards –

回答

1

好吧,假設你想要做什麼是真正有用的,你當然可以列表中的所有批註,或許還有一個參數化測試的(只要你想爲你的所有課程做同樣的事情)。

Class<?> clz = Note.class(); 
Annotation[] annotations = clz.getAnnotations(); // lists all 
Table table = clz.getAnnotation(Table.class); // get the Table annotation 

當然你也可以做同樣的事情...領域

Field[] fields = clz.getDeclaredFields(); 
for(Field field : fields) { 
    Annotation[] annotations = field.getAnnotations(); // lists all 
    Column column = clz.getAnnotation(Column.class); // get the Column annotation 
} 

...和方法(相同的代碼)。我個人傾向於爲每個註釋實現特定的規則,而不是試圖動態解析所有註釋(好吧,我個人不會寫一個沒有測試它的類,所以我不會有這個問題,但這是另一回事;-)。

對於測試本身...

@RunWith(Parameterized.class) 
public class EntityTest { 

    @Parameters(name = "entity #{index} \"{0}\" must be properly annotated") 
    public static Collection<Object[]> data() { 
    return Arrays.asList(new Object[][] { 
     { Note.class }, 
     { Something.class } 
    }); 
    } 

    private final Class<?> entityClass; 

    public EntityTest(final Class<?> entityClass) { 
    this.entityClass = entityClass; 
    } 

    @Test 
    public void someTest() { 
     // test your entityClasss 
    } 

} 
+0

謝謝你,要去了。 –

相關問題