• 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 用来收集测试数量及执行结果

  • 相关阅读:
    arthas Java诊断工具
    tomcat结构 请求处理过程 和 常见参数
    Dubbo 测试用例 获取注册中心的其他服务
    Vue3 父子组件传值,defineProps,defineEmits,以及父组件调用子组件的方法 defineExpose
    Snowflake
    js中Array和Object的keys(),values()和entries()方法
    深度拷贝
    deepin系统解决增删改文件没有变化
    文献的类别与引用方式
    读万卷书不如行万里路
  • 原文地址:https://www.cnblogs.com/zawier/p/7439666.html
Copyright © 2020-2023  润新知