Junit 源码分析

2月 10, 2018 |

JUnit 定义了Request契约接口(其实是一个抽象类), 便于其他的装置(比如maven, eclipse等ide工具)触发Junit执行,这个接口的定义如下:

一堆根据Class创建Request实例的的静态方法, 以及getRunner()方法, getRunner()的默认实现为根据@RunWith注解选择合适的Runner(BlockJUnit4ClassRunner, Suite, SpringJUnit4ClassRunner)等,
Runner主要的方法如下

在构造函数中完成初始化,BlockJUnit4ClassRunner的实现是通过反射查找传入的类中(@Test, @Before等注解的方法),
run()表示开始执行该类中定义的Test case。
Junit将执行@Test注解的方法的每一步抽象为一个Statement对象, 类似servlet的filter

next指针定义在子类中的(便于叙述仿真Statement中),因为有些Statement不需要下一步动作, 比如Fail对象

假设有如下测试对象,

那么Statement的链式结构如下

Posted in: java基础

Comments are closed.