zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/daxiong2014/p/4501189.html
Copyright © 2011-2022 走看看