Junit單元測試:
測試分類:
1、黑盒測試:不需要寫代碼,給輸入值,看程序是否能輸出期望值
2、白盒測試:需要寫代碼,關注程序具體執行流程。
Junit使用:白盒測試使用
步驟:
1、定義一個測試類(測試用例)
建議:
測試類名:被測試的類名後加上Test
包名:xxx.xxx.xx.test
2、定義測試方法:可以獨立運行
建議:
方法名:test測試的方法名 例子`testadd()`
返回值:void,沒有返回值,因爲結果自己看就好了,沒必要寫返回值所以寫void
參數列表:空參
3、給方法加註解@Test
加上@Test方法即可獨立運行
4、導入Junit依賴包
判定結果:
紅色失敗,綠色成功
一般使用斷言操作來處理結果
例子:`Assert.assertEquals(期望的結果,運算的結果);`
補充:
@Before:修飾的方法會在測試方法之前被自動執行,一般用於資源的申請
@After:修飾的方法會在測試方法執行之後自動被執行,一般用於資源的釋放
@Before
public void init(){
System.out.println("init...");
}
@After
public void close(){
System.out.println("close。。。(`ヮ´ )");
}
@Test
public void testAdd(){
jisuanqi c = new jisuanqi();
int result = c.add(1, 2);
System.out.println("testAdd...");
Assert.assertEquals(4,result);
}
輸出的結果爲:
init...
testadd
close。。。(`ヮ´ )
反射
框架設計的靈魂,反射就是將一個類的組成部門封裝成爲其他對象,獲取和操作這些項時,最關鍵的是要獲取class類對象
框架:半成品軟件。可以在框架的基礎上進行軟件的開發,簡化編碼
反射機制:將類的各個組成部分封裝爲其他對象
好處:1、在程序運行過程中,操作這些對象。
2、可以解耦,降低程序的耦合性,來提高程序的可擴展性
獲取class對象的方式:
1、class.forName("全類名"):將字節碼文件加載進內存,返回class對象
*多用於配置文件,將類名定義在配置文件中,讀取文件,加載類
2、類名.class:通過類名的屬性class來獲取
*多用於參數的傳遞
3、對象.getClass():getClass()在object類中定義着
*多用於對象的獲取字節碼的方式
同一個字節碼文件(*.class)在一次運行過程中,只會被加載一次,無論通過哪一種方式獲取的class對象都是同一個
Class對象功能:
*獲取功能:
1、獲取成員變量們
`getFields()`
2、獲取構造方法們
3、獲取成員方法們
4、獲取類名稱
獲取。。
反射技術的案例:
需求:寫一個“框架”,不改變該類的任何代碼的前提下,可以幫我們創建任意類的對象,並且執行其中任意方法。
步驟:1、將需要創建的對象的全類名和需要執行的方法定義在配置文件中
2、在程序中加載讀取配置文件
3、使用反射技術來加載類文件進內存
4、創建對象
5、執行方法
註解:說明程序,給計算機看的
JDK中預定義的一些內置註解
@Override :檢測被該註解標註的方法是否是繼承自父類的
@Oeprecated :將該註解標註的內容,表示已過時
@SuppressWarning :壓制警告,一般寫在類的開頭,傳入的參數可以消除類中的警告,例如:@SuppressWarning(“all”)
自定義註解
格式:
元註解
public @interface 註解名稱{}
本質:註解本質就是一個藉口,該接口默認繼承Annotation接口
屬性:接口中可以定義的成員方法(抽象方法)
要求:屬性的返回值類型
*基本數據類型 public abstract int show1();
*String String show2();//可以省略public abstract
*枚舉 創建一個枚舉類,public enum Person{p1,p2;} Person per;
*註解
*以上類型的數組
如果自定義的註解需要賦值,則需要在使用註解時賦值,如使用默認值,需要在定義時後面加default,例如`String name() default "bate";`
如果只有一個屬性需要賦值,並且屬性的名稱叫value,可以在使用註解時直接定義值。
元註解
用於描述註解的註解就是元註解哈哈哈哈哈哈
@Target:描述註解能夠作用的位置,如果想及作用與方法、類、成員變量上的話需要在加@Target標籤時value中添加對應的取值範圍`@Target({ElementType.TYPE})`
ElementType取值:
TYPE:可以用作於類上
METHOD:可以用作於方法上
FIELE:可以用作於成員變量上
@Retention:描述註解被保留的階段
@Documented:描述註解是否被抽取到api文檔中
@Inherited:描述註解是否被子類繼承
解析註解:獲取註解中定義的屬性值
1、獲取註解定義的位置的對象(Class,Method,Field)
2、獲取指定的註解
3、調用註解的抽象方法獲取配置的屬性值
總結:
1、大多數時候我們會使用註解,而不是自定義註解
2、註解一般只在編譯器和解析程序使用