您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUNIT源码探秘系列(上)
作者:网络转载 发布时间:[ 2013/4/16 14:10:56 ] 推荐标签:
 

步骤(测试代码中含有“suite”):

1.         Main方法先new TestResult,然后待用start方法;start方法中主要做了两件事情,初始化解析加载测试集,即getTest;另外一件是执行调度测试集并记录测试结果,即doRun

2.         在start方法中调用BaseTestRunner中的getTest(),在getTest中,通过反射检查测试代码中是否含有“suite”关键字,如果有则按有“suite”模式执行,上面已经说明过来

3.         如果没有则,创建一个测试TestSuite

new TestSuite(testClass)

4.         将一个个testSuite对象加载到测试集中

5.         通过反射的方法,从测试代码中解析出所有测试方法,然后筛选出test开头,且参数为空,类型为viod的方法,找到待测试的方法(6中筛选过滤),然后通过反射后newInstance一个个测试方法,转化成Junit的测试用例(testcase)

6.         将Junit转化的测试用例加载fTest测试集中,待执行

另外:注意一点,当测试代码中含有构造函数,时,在上图中第5步中,会判断是否含有构造函数,如果有增加两步,则按照下图所示执行,

(1)       通过反射找到构造函数,

(2)       通过构造函数初始化构造对象,即tecase
1.2      运行调度阶段

Junit在执行调度测试代码过程中比较简单,主要有两种情况,一种情况按照正常的情况调用,另外一种情况,如果代码中需要重复执行某个测试方法时,则需要调度repeateTest类

         下图先简单说明下正常情况

其步骤如下:

1.         在3.1中初始化解析完成测试对象后,需要调度执行测试测试代码,在start方法中调用doRun方法

2.         创建一个测试结果集TestResult,初始化TestResult中的主要参数fFailures、fErrors、fListener、fRunTests、fStop

3.         TestResult调用TestSuite中的run方法,并且循环找出结果集中的所有测试对象,即Juint中的testcase

4.         TestSuite调用testRun方法

5.         testRun方法调用TestCase中的run方法

6.  run中调用了runProtected方法,并通过内部类实现对protect()

7.  通过protect()调用runBare()方法

8.  从第九步以后调用了测试函数,完成了整个执行过程(不包括执行结果捕捉和记录)

两外,对于测试代码中含有“RepeatedTest”关键字的,执行流程稍有不同,如下图,其过程不一一解释,可以结合上面的解释了解下。

suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 3));

 


1.3     运行结果捕捉及记录阶段

执行结果捕捉和记录是测试过程非常重要的一部分,所以把这部分过程单独拿出来说明下,前几部分都非常简单,

第四步是通过反射调用测试方法,测试方法再通过调用被测代码,然后产生预期结果,

第五步是通过断言方法,实现对实际执行结果和预期结果比对,

第六步如果预期结果与实际结果不相同则调用failNotEquals

第八步如果错误,调用fail方法,实现返回throw new AssertionFailedError(message),异常

后面几步通过异常捕捉捕捉错误,通过TestResult类中的addFailure进行处理实现。在这块Junit通过观察者模式实现对测试结果的动态捕捉和记录(关于观察者模式后面继续讨论)。具体过程详见下图

关于错误的捕捉(Error)的实现和Fail的比较像,在这不?嗦了。

两外,在这说明下,JUnit中的两个概念错误(error)与失败(failure)

1) 错误指的是代码中抛出了异常等影响代码正常执行的情况,比如抛出了ArrayIndexOutOfBoundsException,这叫做错误。

2) 失败指的是我们断言所期待的结果与程序实际执行的结果不一致,或者是直接调用了fail()方法,这叫做失败。

上一页12345下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd