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