文章目錄
- Junit單元測試、反射、注解
-
- 1.Junit單元測試:
- 2.反射:架構設計的靈魂
- 3.注解:
- 靜态代碼塊
Junit單元測試、反射、注解
1.Junit單元測試:
-
測試分類:
1.黑盒測試:不需要寫代碼,給輸入值,看程式是否能夠輸出期望的值。
2.白盒測試:需要寫代碼的。關注程式具體的執行流程。
-
Junit使用:白盒測試
*步驟:
1.定義一個測試類(測試用例)
*建議:
* 測試類名:被測試的類名Test calculatorTest
* 包名:xxx.xxx.xx.test cn.itcast.test
2.定義測試方法:可以獨立運作
*建議:
*方法名:test測試的方法名testAdd()
*傳回值:void
*參數清單:空參
3.給方法加@Test
4.導入junit依賴環境
- 判定結果:紅色:失敗綠色:成功
- 一般我們會使用斷言操作來處理結果
- Assert.assertEquals(期望的結果,運算的結果);
- 補充:
- @Before:
- 修飾的方法會在測試方法之前被自動執行
- @After:
- 修飾的方法會在測試方法執行之後自動被執行。
- @Before:
2.反射:架構設計的靈魂
- 架構:半成品軟體。可以在架構的基礎上進行軟體開發,簡化編碼
- 反射:捋類的各個組成部分封裝為其他對象,這就是反射機制
-
好處:
1.可以在程式運作過程中,操作這些對象。
2.可以解耦,捉高程式的可擴充性。
-
擷取C1ass對象的方式:I
1.Class.forName(“全類名”):捋位元組碼檔案加載進記憶體,傳回class對象
* 多用于配檔案,将類名定義在配檔案中。讀取檔案,加載類
2.類名.class:通過類名的s性class擷取
* 多用于參數的傳遞
3.對象.getclass():getclass()方法在object類中定義着。
* 多用于對象的擷取位元組碼的方式
-
結論:
同一個位元組碼檔案(*.class)在一次程式運作過程中,隻會被加載一次,
不論通過哪一種方式擷取的Class對象都是同一個。
-
- 反射執行個體代碼:
public class ReflectTest {
public static void main(String[] args) throws Exception {
//可以建立任意類的對象,可以執行任意方法
/*
前提:不能改變該類的任何代碼。可以建立任意類的對象,可以執行任意方法
*/
/* Person p = new Person();
p.eat();*/
/*
Student stu = new Student();
stu.sleep();*/
//1.加載配置檔案
//1.1建立Properties對象
Properties pro = new Properties();
//1.2加載配置檔案,轉換為一個集合
//1.2.1擷取class目錄下的配置檔案
ClassLoader classLoader = ReflectTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("pro.properties");
pro.load(is);
//2.擷取配置檔案中定義的資料
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//3.加載該類進記憶體
Class cls = Class.forName(className);
//4.建立對象
Object obj = cls.newInstance();
//5.擷取方法對象
Method method = cls.getMethod(methodName);
//6.執行方法
method.invoke(obj);
}
}
3.注解:
-
概念:說明程式的。給計算機看的
注釋:用文字描述程式的。給程式員看的
-
定義:注解(Annotation),也叫中繼資料。一種代碼級别的說明。它是JDK1.5及以後版本引人的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,注釋。
*概念描述:
- JDK1.5之後的新特性
- 說明程式的
- 使用注解:@注解名稱
-
作用分類:
①編寫文檔:通過代碼裡辨別的注解生成文檔【生成文檔doc文檔】
②代碼分析:通過代碼裡辨別的注解對代碼進行分析【使用反射】
③編譯檢查:通過代碼裡辨別的注解讓編譯器能夠實作基本的編譯檢查【override】
- jDK中預定義的一些注解
- @Override:檢測被該注解标注的方法是否是繼承自父類(接口)的
- @Deprecated:該注解标注的内容,表示已過時
- @Suppresswarnings:壓制警告
- 自定義注解
-
格式:元注解
[email protected]注解名稱}
- 本質:注解本質上就是一個接口,該接口預設繼承Annotation接口
- public interface MyAnno extends java.lang.annotation.Annotation{}
- 屬性:接口中的抽象方法
-
要求:
1.屬性的傳回值類型有下列取值
* 基本資料類型
* String
* 枚舉*注解
*以上類型的數組
2.定義了屬性,在使用時需要給屬性指派
1.如果定義屬性時,使用default關鍵字給屬性預設初始化值,則使用注解時,可以不進行屬性的指派。
2.如果隻有一個屬性需要指派,并且屬性的名稱是value,則value可以省略,直接定義值即可
3.數組指派時,值使用{}包裹。如果數組中隻有一個值,則{}可以省略
-
-
元注解:用于描述注解的注解
*@Target:描述注解能夠作用的位置
*ElementType取值:
*TYPE:可以作用于類上
*METHOD:可以作用于方法上
*FIELD:可以作用于成員變量上
*@Retention:描述注解被保留的階段
*@Retention(RetentionPolicy.RUNTIMED:目前被描述的注解,會保留到class位元組碼檔案中,并被]VM讀取到
*@Documented:描述注解是否被抽取到api文檔中
*@Inherited:描述注解是否被子類繼承
-
靜态代碼塊
- java類中使用static關鍵字修飾類中的代碼塊
靜态子產品在類加載時執行并且隻執行一次,他可以完成類變量的初始化,靜态初始化代碼塊執行是在main方法執行前完成的。