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

 

posted on 2017-08-27 09:56  _路上  阅读(459)  评论(0编辑  收藏  举报

导航