模擬@Test的功能實現代碼
阿新 • • 發佈:2018-07-03
tar getmethod 必須 enume 使用註解 ride rim 獲得 getname 1.1.1 需求:
定義一個類,在類中編寫一些測試方法:測試方法的格式:public void xxx() 在測試方法上添加@MyTest 然後可以使這個類中添加了有@MyTest註解的方法執行.
1.1.2 分析:1.1.2.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的功能實現代碼