私たちはそれ@Testコメントをカスタマイズする方法を、自動ユニットテストの場合に大幅に開発の効率を向上させることができ、使用済みのJUnitの友人はJUnitのは、Javaのためのユニットテストフレームワークである知っていると考えていますか?すべてのBR />まず、次のようにのは、コメント@Testを書いてみましょう:
注釈のためのパッケージ変更を、
インポートjava.lang.annotation.ElementType;
インポートjava.lang.annotation.Retention;
インポートjava.lang.annotation.RetentionPolicy;
インポートするjava.lang。 annotation.Target;
/ **
- @author Woo_home
- 2019年9月18日によって@Create BR /> * /
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
パブリック@interfaceテスト{ BR />}
@Test注釈型の宣言は、それ自体とターゲット注釈保持することによるものです私たちは、注釈を付けました。注釈型宣言要素にそのような注釈は、注釈(メタアノテーション)と呼ばれます。@Retention(RetentionPolicy.RUNTIME)メタ注釈ショー、@テストアノテーションは、実行時に保持されるべきです。保持されていない場合は、テストツールは@Testコメントを知ることができません。@Target(ElementType.METHOD)メタ注釈ショー、唯一のメソッド宣言で@テストアノテーションは正当なものである:それはクラス宣言には適用されません。フィールド宣言やその他のプログラム要素
@Testアプリケーション・ノートで使用される
パッケージのデモ;
インポートannotation.Test;
/ ** - @author Woo_home
- 2019年9月18日による@Create
* /
publicクラスTestDemo { BR />テスト@
ます。public voidハロー(){
System.out.printlnは( "Hello World"の);
}
}
编写测试运行类
パッケージutilsの。
輸入annotation.Test。
インポートにjava.lang.reflect.InvocationTargetException;
輸入java.lang.reflect.Methodオブジェクト。
/ ** - @author Woo_home
- @Createによる2019年9月18日
* /
パブリッククラスruntestsと書い{
公共の静的な無効メイン(文字列[] args)は例外{スロー
int型のテスト= 0; //レコードの成功
のint渡さ= 0; //レコードが失敗した
クラスTestClassを=クラス。 forName( "demo.TestDemo");クラスで注釈//反射@Test
ため(方法、M:testClass.getDeclaredMethods()){
(m.isAnnotationPresent(Test.class)){//テストが定義されている場合、注釈クラスは、isAnnotationPresent方法は、操作手段・ツール伝え
++テストを、
試してみるには、{
m.invoke(testClass.newInstanceは()); // @Testクラスメソッドですべてのラベルを実行することにより、反射的に呼び出す呼び出す
; ++渡さ
キャッチ(にInvocationTargetException wrappedExc} ){
ThrowableをwrappedExc.getCause EXC =();
System.out.printlnは(M + "失敗しました:" + EXC);
}キャッチ(例外EXC){
するSystem.out.println( "INVALID @Test:" + M)。
}
}
}
System.out.printf( "合格:Dの%、失敗:N-%D%"、テスト、-通過テストの); BR />}
}
我々は、このクラスの不足が@Test印刷注釈付き方法でマークします
しかし、唯一のクラスはメソッドの戻り値が与えられます場合は、たとえば、値を返さない@Test方法で標識:
パッケージのデモ、
インポートannotation.Test;
/ ** - @author Woo_home
- @Createによって2019年9月18日
* /
publicクラスTestDemo { BR /> @テスト
公共INT TEST1(INT I){
I = 0;
戻りI; BR />}
@Test
公共ボイドハロー(){
のSystem.out。 println( "Hello Worldのは");
}
}
場合
最初のカテゴリは、空のコメントmytest.javaです:
パッケージcom.iceflame.mytest;
インポートjava.lang.annotation.Retention;
インポートjava.lang.annotation.RetentionPolicy; BR /> @Retention(RetentionPolicy.RUNTIME)
パブリック@interfaceのMyTest { BR />}
次にであるクラス、@MyTest注釈を追加する方法utilの
パッケージcom.iceflame.mytest;
StringUtilのパブリッククラス{ BR />のMyTest @
関数(){/ ThinkMarkets} www.kaifx.cn/broker/thinkmarkets.html剤
公共ボイドプリント()
{
System.out.printlnは( "印刷()メソッドを実行する")を;
}
}
最後のカテゴリは、コア動作であり、 coreRunner.java(主に、思考によって抽出プロセスにコメントを反映して実行)
com.iceflame.mytestパッケージ、
インポートにjava.lang.reflect.InvocationTargetException;
インポートjava.lang.reflect.Methodオブジェクト、
パブリッククラスCoreRunner {
公共ボイドメイン静的(文字列[]引数)はIllegalAccessExceptionが、はIllegalArgumentException、にInvocationTargetExceptionをスローないInstantiationExceptionは、ClassNotFoundExceptionがある{
//クラス= clazz Class.forNameの( "com.iceflame.mytest.StringUtil");
クラスclazz = StringUtil.class;
方法、[] ; = clazz.getMethods方法()
:(メソッドメソッド、M)のための
{
(m.isAnnotationPresent(MyTest.class))IF
{
m.invoke(clazz.newInstance()、ヌル);
}
}
}
}
なお、m.invoke(***、NULL)NULLがここでパラメータです、パラメータメソッドが実行され、我々はここで使用し、メソッドが静的であり、パラメータは動的であるため、アノテーション付きメソッドが、一般的にはパラメータはありませんときに我々は@Testを使用する理由、それは説明することができますので、反射は、パラメータを知っているではありません今だけ私達が反射、クラスインスタンスの逆、内部パラメータのないメソッドの実装を使用している、実行時に渡します。BR />を使用して、カスタム注釈は同様の効果@Test注釈行う
1、需要:
試験のために、クラスメソッドの手順では、意志、カスタム注釈を@Testを使用してツールJUnitのユニットテスト@MyTestクラスに適用される方法についての注意事項は、この方法が実装されています。- テクニカル分析:
[メモ]
プログラムは、コメントや注釈が持っている
注意:開発者を探してください。
注:コンピュータを見て
[メモ] JDKが提供
@Overrideは方法の説明を書き直し:.
:.抑制が警告@SupperssWarningsを
@Deprecatedを:タグ廃止。BR />] [カスタム注釈
クラスの定義:クラスは
インターフェイスを定義:インタフェース
列挙の定義:列挙は、
アノテーションを定義:@interface
[ケース]カスタム注釈
@interfaceのMyDemo1 {
}
属性で注釈:
{MyDemo2 @interface
int型A()デフォルト1;
文字列B();
//注釈プロパティを持つ:基本データ型、文字列型STIのあなたは、クラス、注釈型、列挙型、および一次元の1つまたは複数のタイプを持っています配列。
//日付();
クラスのCl();
MyDemo3 D3(); //コメント
色C(); //列挙
文字列[] ARRS();
}
@ MyDemo4( "AAA")//属性名がある場合次いで、値(値取得した属性値は、ケースを発生する)ときに得られる値は省略することができる使用。
Demo3クラス{公共
}
@interface MyDemo4 {
String値、
INT A()デフォルト1;
}
3、分析する工程。
試験クラスを定義:
パブリッククラスDemo3 { BR />のMyTest @
公共ボイドDEMO1(){
System.out.printlnは( "実行DEMO1
...."); }
公共ボイドDEMO2(){}
}
コアの実行クラスを定義:
コアクラスで実行されている主な機能があります。
クラスをテストするためにすべての方法を取得します。
ビュー方式にコメント@MyTestがいるかどうか、各メソッドを取得します。
BR />のSystem.out.println(「実行DEMO2 ....」);
}
}
コアの実行クラスを定義:
コアクラスで実行されている主な機能があります。
クラスをテストするためにすべての方法を取得します。
ビュー方式にコメント@MyTestがいるかどうか、各メソッドを取得します。
この注釈場合は、このメソッドが実行されます。
4達成コード
要素注釈相アノテーション定義が存在することによって
コメントを定義:
コアタイプのラン:
パブリッククラスランナー{
パブリック静的無効メイン(文字列[] args){
//反射:.classファイルを取得して取得したクラスのバイトコードオブジェクト
クラスクラス1 Demo3.class =;
//すべての方法は、試験クラス取得する取得:
メソッドを、[] =のmjethodsのclass.getMethods();
//反復:
(メソッド、メソッド:メソッド)は{
//System.out.println(方法.getName ()); @MyTest注かどうかを決定するのBR /> //方法。
フラグ= method.ispresentブール(MyTest.class)で;
//するSystem.out.println(method.getName()+ "" +フラグに);
IF(フラグに){
//このメソッドの実装を許可:
試し{
Method.invoke( clazz.newInstance()は、null);
}キャッチ(例外E){
e.printStackTrace();
}
}
}
}
}
JDBCの準備完了するために、注釈ツールを使用して:
パブリッククラスJDBCUtils {
privatestatic文字列driverClass;
privatestatic文字列のURLを、
privatestatic文字列のユーザー名;
privatestatic文字列のパスワード、
@JDBCInfo
publicstatic接続のgetConnection()は、例外がスロー{
//反射:
クラスclazz = JDBCUtils.classと、
方法メソッド= clazz.getMethod( "のgetConnection"、NULL);
//获得方法上的注解:
JDBCInfo jdbcInfo = method.getAnnotation(JDBCInfo.class)。
driverClass = jdbcInfo.driverClass()。
URL = jdbcInfo.url();
ユーザ名= jdbcInfo.username();
パスワード= jdbcInfo.password();
Class.forNameの(driverClass)。
接続でCONN =したDriverManager.getConnection(URL、ユーザ名、パスワード);
CONN返します。
}
}
- テクニカル分析: