以下の3つのモードの名前の欠点:(前版4、JUnitテストフレームワークは[Beck04】試験方法指定された名前を起動テストするために、そのユーザが必要)
1.スペルミスは故障につながるが、要求されません。
2.彼らは唯一の適切なプログラム要素のために使用することはできないことを確認してください。
3.彼らは、プログラム要素に関連付けられた優れたメソッドのパラメータ値を提供しません。
Junit4例の下の注釈の利点を示すために
/ ** *アノテーション付きメソッドがテストメソッドであることを示します。 *パラメータなしの静的メソッドにのみ使用します。 * / @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) パブリック @のインターフェイステスト{ }
// マーカー注釈を処理するためのプログラムの インポートれるjava.lang.reflectを*。;
パブリック クラスruntestsと書い{ 公共 静的 ボイドメイン(文字列[]引数)をスロー例外{ int型のテスト= 0 。 int型 = 0渡されます。 クラス <?> TestClassを= Class.forNameの(引数[0 ])。 用(方法M:testClass.getDeclaredMethods()){ 場合(m.isAnnotationPresent(テストクラス)){ テスト ++ 。 してみてください{ m.invoke(ヌル)。 渡さ ++ ; } キャッチ(にInvocationTargetException wrappedExc){ たThrowable EXC = wrappedExc.getCause()。 System.out.println(M + "が失敗しました:" + EXC)。 } キャッチ(例外EXC){ するSystem.out.println( "無効@Test:" + M)。 } } } System.out.printf( "合格:%のD、失敗しました:%d個の%のN" 、通過、試験 - 渡されます)。 }
}
Javaの8以降、多値ノートを実行するための別の方法があります。@Repeatable要素をすることなく、注釈文ノートを指定するために使用することができる
アノテーションを宣言アレイ型パラメータを使用して、注釈は、単一の要素を示すために繰り返し適用することができます。
// 反復注釈型 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD)@Repeatable(ExceptionTestContainer。 クラス) 公共の@ インタフェースExceptionTest { クラス <?延び例外> 値は(); }
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) パブリック @のインタフェースExceptionTestContainer { ExceptionTest []の値(); }
//コード繰り返さ注釈含む
@ExceptionTest(IndexOutOfBoundsException.class)を
@ExceptionTest(NullPointerException.class)
パブリック静的ボイドdoublyBad(){...}
概要:あなたは場所に注釈を使用することができる場合は、名前付けパターンを使用する理由はありません。すべてのプログラマは、Javaが提供する事前に定義された注釈型を使用する必要があります。