6.35名前付きモードの代わりにAnnotationを使用する

2034 ワード

一般的なテストフレームワーククラス、例えばJUnit、TestNGは、testの先頭にあるメソッドをテストメソッドとして指定するなど、いくつかの名前を持つメソッドをテストメソッドとして設定することができます.
1.メソッド名のスペルが間違っている場合は、何のヒントもありません.tsetHello()と誤記した場合、このメソッドはテスト時に実行されませんが、エラーメッセージもありません.
 
2.testSafety()などの他のメソッドを誤って実行する可能性がありますが、テストメソッドのネーミングパターン(testで始まるメソッド)に合致するため、テスト時に呼び出されます.
 
3.入力パラメータ値を試験方法に渡すことができない
 
Annotationを使用すると、次のような問題を回避できます.
 
	// @Test 
	@Test
	public void sayHello(){}
	
	// @Test dataProvider 
	@Test(dataProvider="dataProvider1")
	public void sayOK(String key,String value){}

 
 
以下、Annotationの使用について簡単に説明します.Annotationは@interface宣言を使用します.場合によっては、Annotationはインタフェース(インタフェースの代わりに機能する)と見なされます.以下はカスタムAnnotationクラスです.
 
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
	String value() default "OK";
}

 
 
@Documented javadocの生成時にAnnotationのヘルプドキュメントの説明を同時に生成する必要があることを指定します.Annotationがビジネスに関連している場合は、一般的に説明ドキュメントを生成する必要があります.
 
@RetentionはAnnotation情報の保持ポリシーを指定し、現在は3つのポリシーが含まれている:SOURCE/CLASS/RUNTIME、それぞれAnnotation情報をソース/コンパイル後のclassファイルに保持/実行時にJVMにロードする
 
@Targetは、前例のようにElementTypeに設定するAnnotationの適用先を指定します.METHODではMyAnnotationはメソッド(method)にのみ使用できます
 
Annotationのメソッドは、前例のvalue()のように、Annotationのパラメータ値を指定するために使用されます.メソッドの戻り値は、基本データ型、String、Enum、Class、Annotation型(対応する配列を含む)のみを使用できます.Annotationにパラメータが1つしかない場合、
推奨メソッド名は「value」です.defaultを使用してメソッドのデフォルトの戻り値を指定することを推奨します
 
反射を使用してターゲットに使用されるAnnotationを取得するには、次のようにします.
	@Test
	@MyAnnotation("OK")
	public void testAnnotation() throws Exception{
		Method method=AnnoTest.class.getDeclaredMethod("testAnnotation");
		MyAnnotation myAnnotation=method.getAnnotation(MyAnnotation.class);
		Assert.assertEquals(myAnnotation.value(), "OK");
	}