zoukankan      html  css  js  c++  java
  • JUnit 3.8.1 源码学习简记

    先记录一个整理的流程

    1、首先使用TestSuite获取一个TestCase中的所有测试方法(方法名以test开头的方法),为每个方法生成一个TestCase实例并保存,实例中有个字段保存对应的方法名(为之后反射运行对应的方法做准备)。

    2、之后依次执行所有生成的实例的run方法(命令模式),其中代码如下

    // TestCase.java
    public void run(TestResult result) {
        result.run(this); // TestCase 调用 TestResult 的方法
    }

    TestResult之后主要用来收集运行的结果(其中维护一个监听器列表,在失败或错误时发送通知),它还会反过来调用TestCase来实际执行,TestResult 中的代码如下

    // TestResult.java
    protected void run(final TestCase test) {
        startTest(test); // 用来收集一共有多少个测试方法
        Protectable p= new Protectable() {
            public void protect() throws Throwable {
                test.runBare(); // TestResult 调用 TestCase 的方法执行----实例执行方法
            }
        };
        runProtected(test, p); // 用来收集运行的结果(成功、失败数量)
    ​
        endTest(test);
    }
    ​
    // 收集运行结果
    public void runProtected(final Test test, Protectable p) {
        try {
            p.protect();
        } 
        catch (AssertionFailedError e) { // 运行失败
            addFailure(test, e);
        }
        catch (ThreadDeath e) { // don't catch ThreadDeath by accident
            throw e;
        }
        catch (Throwable e) { // 运行出现错误
            addError(test, e);
        }
    }

    其中调用的而TestCaserunBare()方法如下

    // TestCase.java
    public void runBare() throws Throwable {
        setUp();
        try {
            runTest(); // 反射调用方法执行
        }
        finally {
            tearDown();
        }
    }

    总结如下:

    首先使用 TestSuite 将测试类 TestCase 拆分,为每个测试方法生成一个实例

    依次执行每个实例的执行方法,中间经过 TestResult 用来收集测试数量及执行结果

  • 相关阅读:
    Spring异常重试框架Spring Retry
    Ubuntu 16.04无法在WPS中输入中文的问题解决
    Ubuntu 16.04使用百度云的方案
    Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)
    Ubuntu下Deb软件包相关安装与卸载
    Spring在Java Filter注入Bean为Null的问题解决
    MyBatis 3在Insert之后返回主键
    MySQL JDBC URL参数(转)
    MySQL索引原理及慢查询优化
    Markdown 语法整理大集合2017
  • 原文地址:https://www.cnblogs.com/zawier/p/7439666.html
Copyright © 2011-2022 走看看