先上一个在Spring-test下运行的调用栈

自底向上:
JUnitStarter
IDEA对JUnit的支持,调用JUnitCore.run(Runner),将注解@RunWith指定的Runner作为参数传给JUnit。该方法注释“Do not use. Testing purposes only.”,
 
JUnitCore
运行JUnit测试的入口。通过调用run()方法启动测试。
 
Runner
testcase运行的容器。JUnit默认使用BlockJUnit4ClassRunner。
鼓励扩展实现自己的Runner。例如Spring-test扩展BlockJUnit4ClassRunner实现了SpringJUnit4ClassRunner。
 
RunNotifier
在testcase开始、结束、成功、失败、忽略时,通知JUnit。
 
RunListener
测试运行事件的监听器。默认只有一个listener,在Result类内部定义,用来记录测试开始时间、耗时、成功个数、失败个数。
如果需要自定义的listener,扩展RunListener,并通过JUnitCore.addListener()添加。
 
Runner.run()
看下run方法的实现

  public void run(final RunNotifier notifier) {
EachTestNotifier testNotifier = new EachTestNotifier(notifier,
getDescription());
try {
Statement statement = classBlock(notifier);
statement.evaluate();
} catch (AssumptionViolatedException e) {
testNotifier.fireTestIgnored();
} catch (StoppedByUserException e) {
throw e;
} catch (Throwable e) {
testNotifier.addFailure(e);
}
}
EachTestNotifier
没看懂这个类的用意,内部类也没有文档,可能是为了以后扩展留的吧。
 
Statement
一个Statement是运行测试时的一段指令。看下classBlock()的实现:
protected Statement classBlock(final RunNotifier notifier) {
Statement statement = childrenInvoker(notifier);
statement = withBeforeClasses(statement);
statement = withAfterClasses(statement);
statement = withClassRules(statement);
return statement;
}
classBlock构建了一个Statement的责任链。
第一个statement: 将所有@Test标记的方法在RunnerScheduler中执行,默认的实现是串行执行的。有没有并行执行的实现?
第二个statement:将@BeforeClass标记的方法封装成Statement,并放在责任链第一位。
第三个statement:将@AfterClass标记的方法封装成Statement,并放在责任链第一位。但是RunAfters的实现会先执行fNext(即上一步封装的RunBefores),再执行自己封装的方法。这里的实现跟当初设计fNext这个域的初衷有点不一致。
第四个statement:@ClassRule注解,工作中没用过,改天再详细了解。
 
接下来就是依次执行statement链了。
 
 

JUnit4源码学习笔记的更多相关文章

  1. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  2. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  3. AXI_LITE源码学习笔记

    AXI_LITE源码学习笔记 1. axi_awready信号的产生 准备接收写地址信号 // Implement axi_awready generation // axi_awready is a ...

  4. Hadoop源码学习笔记(6)——从ls命令一路解剖

    Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...

  5. Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构

    Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...

  6. Hadoop源码学习笔记(4) ——Socket到RPC调用

    Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要 ...

  7. Hadoop源码学习笔记(3) ——初览DataNode及学习线程

    Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...

  8. Hadoop源码学习笔记(2) ——进入main函数打印包信息

    Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...

  9. Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类

    Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何 ...

随机推荐

  1. input元素的required属性引发的血案

    罪魁祸首===> 1,input 有一个tel类型,为移动端设置的 2,input的radio类型是根据name区分的,与id.class无关 3,<!DOCTYPE html>:文 ...

  2. LeetCode - Backspace String Compare

    Given two strings S and T, return if they are equal when both are typed into empty text editors. # m ...

  3. 链表中倒数第k个节点(Java)

    链表中倒数第k个节点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:two-pointers思想,因为是单链表,没法得prevous点,直接遍历得到链表长度再重新遍历效率很低. 采用双指 ...

  4. C++ 状态机接口

    最近的状态极差,甚至代码也写不下去了.给自己手臂上的两刀没有任何的作用,看来早已经是麻痹了. 一直想弄一个勉强能用的状态机,用于在各种涉及到状态转换的时候用到,然而脑子并不是太清醒. 先放在这里一个接 ...

  5. SignalR 行实时通信遇到的

    SignalR可用于向ASP.NET应用程序添加任何类型的“实时”Web功能.虽然聊天经常被用作示例,但您可以做更多的事情.每当用户刷新网页以查看新数据,或者页面实现Ajax长轮询以检索新数据时,都可 ...

  6. Windows batch file

    Echo off @ECHO OFF echo string to generate the output create a blank line echo . create a file echo ...

  7. idea调试代码跟踪到tomcat代码里面

    在POM.xml文件里面加上如下代码即可: <dependency> <groupId>org.apache.tomcat</groupId> <artifa ...

  8. day04 迭代器&生成器&装饰器

    目录   1.迭代器 2.生成器 3.推导式 4.匿名函数 5.内置函数 6.递归 7.闭包 8.装饰器 一.迭代器 特点: 1. 省内存 2. 只能向前. 不能反复 3. 惰性机制 让不同的数据类型 ...

  9. a标签通过浏览器下载远程图片

    <a href="http://fooku.oss-cn-hongkong.aliyuncs.com/image/store/2nblHVyB6cWyBI7Aq2SEp6aZRBlui ...

  10. 斐讯N1折腾记

    斐讯N1折腾记:运行 Linux 及优化  2018-06-23  37条评论  4,445次阅读  11人点赞 最后更新时间:2019年03月10日 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了 ...