• Junit内部解密之三: 单元测试用例运行的全过程


    转自:http://blog.sina.com.cn/s/blog_6cf812be0100x8sb.html

    我们以一个非常简单的TestCalculator类为例,只有一个测试方法:

    Public class TestCalculator extends TestCase

    {

           Public void testAdd()

           {

                  Calculator calculator = new Calculator();

                  Double result = calculator.add(10, 50);

                  assertEquals(60, result);

           }

    }

    当我们使用Run in Junit 的时候,之前说到过的几个核心类之间是怎么运行的呢?我们先看下基本过程:

    TestRunner启动界面框 —》创建一个TestSuite ––》创建一个TestResult—》执行testadd方法。

    由于我们的TestCalculator测试类里面没有显式的suite方法,大部分情况下都是类似,这样的话,TestRunner创建了一个默认的TestSuite对象,看下图:

    Junit内部解密之三: <wbr>单元测试用例运行的全过程



    那么同时TestRunner还需要创建包含测试结果(成功,失败或出错)的TestResult对象,具体过程如下:

    Junit内部解密之三: <wbr>单元测试用例运行的全过程

    1.最开始的时候,TestRunner实例化了一个TestResult对象,在测试顺序执行的时候,这个对象将用于保存测试结果。

    2.TestRunner向TestResult注册,就是add一个监听器,这样的话在执行测试过程中,TestRunner就可以收到各种事件,TestResult会广播如下方法:测试开始(startTest); 测试失败(addFailure); 遇到测试错误(addError); 测试结束(endTest)

    3.知道了这些事件后,TestRunner就可以随着测试的进行而显示进度条了,并且在失败或错误的时候显示出来。

    4.TestRunner通过调用TestSuite的run(TestResult)方法来开始测试

    5.TestSuite为它所拥有的每个Test Case实例调用run(TestResult)方法。

    6.Test Case使用传递给它的TestResult实例来调用其run(Test)方法,并把自身作为参数传递给run方法,这样TestResult 立马就可以用runBare()来回调它。

    接着就是执行测试方法了:

    这里需要说明的是对于每个TestCase都会调用runBare()方法,这里只有一个testAdd方法,所以只调用一次,请看下图:

    Junit内部解密之三: <wbr>单元测试用例运行的全过程

    1.runBare()方法将调用setUp, testAdd, teardown 方法,顺序执行。

    2.如果调用3个方法的过程出现任何失败或错误,那么TestResult就会分别调用addFailure 和addError来通知它的所有Listener。

    3.这样TestRunner就会收到这些错误或失败,也会罗列出这些错误,否则进度条就是绿色的,让你知道测试方法没有问题。

    4.当tearDown方法执行完后,测试也就完成了,TestResult 会通过调用endTest把这个结果通告给所有的Listener。

  • 相关阅读:
    第八周读书笔记 ——编程之美
    结对编程收获——旧的不去&新的不来
    第七周读书笔记——深入理解计算机系统
    第六周读书笔记——《编程珠玑(第二版)》
    专业性体育平台——虎扑的发展与创新的思考(第五次课后作业)
    第五次读书笔记—— Robrt C. Martin的《代码整洁之道》
    个人博客-ASE课程最后一周总结
    期中作业,阅读材料感想
    Poemscape beta版本第二阶段目标描述
    Poemscape|Beta阶段第二天
  • 原文地址:https://www.cnblogs.com/daxiong2014/p/4501189.html
Copyright © 2020-2023  润新知