1. 程式人生 > >模擬@Test的功能實現代碼

模擬@Test的功能實現代碼

tar getmethod 必須 enume 使用註解 ride rim 獲得 getname

1.1.1 需求:
定義一個類,在類中編寫一些測試方法:測試方法的格式:public void xxx() 在測試方法上添加@MyTest 然後可以使這個類中添加了有@MyTest註解的方法執行.
1.1.2 分析:1.1.2.1 技術分析:
【註解的概述】


? 註解和註釋區別:

* 註釋:給程序員看的.

* 註解:給虛擬機看的.(讓虛擬機看到程序中的註解,註解代表程序的一些特殊的功能.)

【JDK中提供的註解】

? @Override        :描述子類重寫父類的方法:

* JDK1.5版本的時候 該註解只能應用在 類的繼承上.

* JDK1.6版本的時候 該註解可以應用在 類的實現上.

? @SuppressWarnings        :壓制警告.

? @Deprecated        :描述方法過時.

【自定義註解】

? 自定義註解:

* 定義類        :class

* 定義接口        :interface

* 定義枚舉        :enum

* 定義註解        :@interface

? 代碼實現:

/**

 * 定義一個註解:名稱是Anno1

 */

@interface Anno1{

}

? 定義註解的屬性:

 Invalid type Date for the annotation attribute Anno2.d; only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof

* 註解的屬性的類型:

    * 基本數據類型:

    * String類型:

    * Class類型:

  * 註解類型:

    * 枚舉類型:

    * 以上類型的一維數組:
  • 代碼實現:
/**

 * 定義一個帶有屬性的註解:Anno2

 */

@interface Anno2{

int a();

boolean b() default false;

String s();

// Date d();

Class c();

Anno1 anno1();

Color color();

String[] arrs();

}

***** 特殊的屬性名稱:value

 * 如果使用註解的時候,只出現了value屬性,value屬性可以省略的.

1.1.3 代碼實現:

【步驟一】:自定義註解:MyTest

【步驟二】:定義核心運行類.

【步驟三】:在核心運行類中.

    * 獲得測試類的Class

    * 獲得Class中的所有方法.

    * 遍歷得到每個方法.

    * 判斷方法上有MyTest註解,就執行該方法.

         * 自定義註解默認存在於源碼階段,需要讓註解存在的時間更長.使用元註解:(只用於修飾其他的註解)

代碼:

public class CoreRunner {

public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
/**

 * 獲得測試類的Class.

 * 獲得Class中的所有的方法.

 * 遍歷每個方法,查看每個方法上是否有MyTest註解.

 * 有MyTest註解,這個方法就執行.

 */

// 1.獲得測試類的Class:

Class clazz = AnnotationDemo1.class;

// 2.獲得Class中的所有的方法: 規定了測試的方法必須是public.

Method[] methods = clazz.getMethods();

// 3.遍歷每個方法:

for(Method method:methods){

boolean flag = method.isAnnotationPresent(MyTest.class);

// System.out.println(method.getName()+ "     " + flag);

if(flag){

// 說明方法上有MyTest註解:

method.invoke(clazz.newInstance(), null);

}

}

}

}

模擬@Test的功能實現代碼