1.1 初始化加载用例集阶段
在初始化加载阶段,程序解析主要有一个重要分支,一个是测试代码中是否有”suite”关键字,两外在测试代码中是否含有”RepeatedTest”也要注意。
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(CalculatorTest.class);
return suite;}
我们先看看代码中含有”suite”的加载过程,下图所示(根据代码绘制):
步骤(测试代码中含有“suite”):
1. Main方法先new TestResult,然后待用start方法;start方法中主要做了两件事情,初始化解析加载测试集,即getTest;另外一件是执行调度测试集并记录测试结果,即doRun
2. 在start方法中调用BaseTestRunner中的getTest(),在getTest中,通过反射检查测试代码中是否含有“suite”关键字,如果没有则按上图的流程图执行调用,创建一个TestSuite
3. 如果有则如上图所示执行,通过反射调用解析测试方法
(Test)suiteMethod.invoke(null, new Class[0]);
4. 在测试方法中调用并初始化TestSuite
5. 将一个个testSuite对象加载到测试集中
6. 通过反射的方法,从测试代码中解析出所有测试方法,然后筛选出test开头,且参数为空,类型为viod的方法,
7. 找到待测试的方法(6中筛选过滤),然后通过反射后newInstance一个个测试方法,转化成Junit的测试用例(testcase)
8. 将Junit转化的测试用例加载fTest测试集中,待执行
另外:注意一点,当测试代码中含有构造函数,时,在上图中第7步中,会判断是否含有构造函数,如果有增加两步,则按照下图所示执行
(1) 通过反射找到构造函数,
(2) 通过构造函数初始化构造对象,即tecase
上面说明了下在测试代码中含有“suite”的情况,下面接着继续看看测试代码中不含有“suite”时,如下图