第十三天、單元測試、反射、注解
單元測試
介紹
單元測試
-
就是針對最小的功能單元(方法),編寫測試代碼對其進行正確性測試
咱們之前是如何進行單元測試的? 有啥問題 ?
-
只能在main方法編寫測試代碼,去調用其他方法進行測試。
-
無法實現自動化測試,一個方法測試失敗,可能影響其他方法的測試。
-
無法得到測試的報告,需要程序員自己去觀察測試是否成功。
Junit單元測試框架
-
可以用來對方法進行測試,它是由Junit公司開源出來的
優點
-
可以靈活的編寫測試代碼,可以針對某個方法執行測試,也支持一鍵完成對全部方法的自動化測試,且各自獨立。
-
不需要程序員去分析測試的結果,會自動生成測試報告出來。
Junit框架快捷入門
步驟 : Junit單元測試-快速入門
需求
-
某個系統,有多個業務方法,請使用Junit單元測試框架,編寫測試代碼,完成對這些方法的正確性測試。
具體步驟
-
將Junit框架的jar包導入到項目中
-
為需要測試的業務類,定義對應的測試類,并為每個業務方法,編寫對應的測試方法(必須:公共、無參、無返回值)
-
測試方法上必須聲明@Test注解,然后在測試方法中,編寫代碼調用被測試的業務方法進行測試
-
開始測試:選中測試方法,右鍵選擇“JUnit運行” ,如果測試通過則是綠色;如果測試失敗,則是紅色
Junit框架的常見注解
Junit單元測試框架的常用注解(Junit 4.xxxx版本)
-
在測試方法執行前執行的方法,常用于:初始化資源。
-
在測試方法執行完后再執行的方法,常用于:釋放資源。
Junit單元測試框架的常用注解(Junit 5.xxxx版本)
-
開始執行的方法:初始化資源
-
執行完之后的方法:釋放資源
反射
認識反射、獲取類
反射(Reflection)
-
反射就是:加載類,并允許以編程的方式解剖類中的各種成分(成員變量、方法、構造器等)。
反射學什么
反射第一步:加載類,獲取類的字節碼:Class對象
獲取Class對象的三種方式
-
直接使用類名.class獲取:Class c1 = 類名.class
-
調用Class提供的方法:Class c2 = Class.forName("全類名")
-
調用Object提供的方法:Class c3 = 對象.getClass()
獲取類的構造器
獲取類的構造器、并對其進行操作
-
Class提供了從類中獲取構造器的方法。
獲取類構造器的作用:依然是初始化對象返回
獲取類的成員變量
獲取類的成員變量
-
Class提供了從類中獲取成員變量的方法。
獲取到成員變量的作用:依然是賦值、取值
獲取類的成員方法
獲取類的成員方法
-
Class提供了從類中獲取成員方法的API。
成員方法的作用:依然是執行
作用、應用場景
反射的作用?
-
基本作用:可以得到一個類的全部成分然后操作。
-
可以破壞封裝性。
-
最重要的用途是:適合做Java的框架,基本上,主流的框架都會基于反射設計出一些通用的功能。
注解
快速入門
注解(Annotation)
-
就是Java代碼里的特殊標記,比如:@Override、@Test等
-
這些標記會被特定的注解解析器所發現,進而決定應該怎樣去編譯或者執行被注解標記出來的程序
自定義注解格式
-
//元注解 public @interface 注解名稱 { } 注解本質是一個接口,Java中所有注解都是繼承了Annotation接口的。
元注解
-
指的是:修飾注解的注解,可以指定注解的標注位置和保留階段
-
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface Test { }
注解解析
什么是注解的解析?
-
就是判斷類上、方法上、成員變量上是否存在注解,并把注解里的內容給解析出來。
如何解析注解?
-
指導思想:要解析誰上面的注解,就應該先拿到誰
-
比如要解析類上面的注解,則應該先獲取該類的Class對象,再通過Class對象解析其上面的注解
-
比如要解析成員方法上的注解,則應該獲取到該成員方法的Method對象,再通過Method對象解析其上面的注解
-
Class 、 Method 、 Field , Constructor、都實現了AnnotatedElement接口,它們都擁有解析注解的能力
注解屬性
注解屬性
-
在定義注解的時候,還可以通過屬性來進一步描述注解的細節
-
public @interface 注解名稱 { public 屬性類型 屬性名() default 默認值 ; }
特殊屬性名: value
-
如果注解中只有一個value屬性,使用注解時,value名稱可以不寫!!
Lombok
lombok
-
Lombok是一個實用的Java類庫,能通過注解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,并可以自動化生成日志變量,簡化java開發、提高效率。
注意事項
-
Lombok會在編譯時,自動生成對應的java代碼。我們使用lombok時,還需要安裝一個lombok的插件(idea自帶)。