1.1 初始化加載用例集階段
在初始化加載階段,程序解析主要有一個(gè)重要分支,一個(gè)是測(cè)試代碼中是否有”suite”關(guān)鍵字,兩外在測(cè)試代碼中是否含有”RepeatedTest”也要注意。
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(CalculatorTest.class);
return suite;}
我們先看看代碼中含有”suite”的加載過(guò)程,下圖所示(根據(jù)代碼繪制):
步驟(測(cè)試代碼中含有“suite”):
1. Main方法先new TestResult,然后待用start方法;start方法中主要做了兩件事情,初始化解析加載測(cè)試集,即getTest;另外一件是執(zhí)行調(diào)度測(cè)試集并記錄測(cè)試結(jié)果,即doRun
2. 在start方法中調(diào)用BaseTestRunner中的getTest(),在getTest中,通過(guò)反射檢查測(cè)試代碼中是否含有“suite”關(guān)鍵字,如果沒(méi)有則按上圖的流程圖執(zhí)行調(diào)用,創(chuàng)建一個(gè)TestSuite
3. 如果有則如上圖所示執(zhí)行,通過(guò)反射調(diào)用解析測(cè)試方法
(Test)suiteMethod.invoke(null, new Class[0]);
4. 在測(cè)試方法中調(diào)用并初始化TestSuite
5. 將一個(gè)個(gè)testSuite對(duì)象加載到測(cè)試集中
6. 通過(guò)反射的方法,從測(cè)試代碼中解析出所有測(cè)試方法,然后篩選出test開(kāi)頭,且參數(shù)為空,類型為viod的方法,
7. 找到待測(cè)試的方法(6中篩選過(guò)濾),然后通過(guò)反射后newInstance一個(gè)個(gè)測(cè)試方法,轉(zhuǎn)化成Junit的測(cè)試用例(testcase)
8. 將Junit轉(zhuǎn)化的測(cè)試用例加載fTest測(cè)試集中,待執(zhí)行
另外:注意一點(diǎn),當(dāng)測(cè)試代碼中含有構(gòu)造函數(shù),時(shí),在上圖中第7步中,會(huì)判斷是否含有構(gòu)造函數(shù),如果有增加兩步,則按照下圖所示執(zhí)行
(1) 通過(guò)反射找到構(gòu)造函數(shù),
(2) 通過(guò)構(gòu)造函數(shù)初始化構(gòu)造對(duì)象,即tecase
上面說(shuō)明了下在測(cè)試代碼中含有“suite”的情況,下面接著繼續(xù)看看測(cè)試代碼中不含有“suite”時(shí),如下圖