JUnit4 源码 之 Runner
- Runner 抽象类
- ParentRunner & BlockJUnit4ClassRunner 基本实现
- Suite 实现原理
- 扩展阅读
Runner抽象类
Runner抽象类的最为重要的方法就是run方法,这点 从JUnitCore中就可以看出来
// from JUnitCore -- 从JUnitCore(测试驱动类)上看Runner
public Result run(Runner runner) {
runner.run(notifier); ...... } // 只关心Runner接口的run方法
ParentRunner & BlockJUnit4ClassRunner 基本实现
接着 尝试去找run方法的实现,在ParentRunner中发现了
@Override
public void run(final RunNotifier notifier) {
Statement statement = classBlock(notifier);
statement.evaluate();
}
protected Statement classBlock(final RunNotifier notifier) {
Statement statement = childrenInvoker(notifier);
if (!areAllChildrenIgnored()) {
statement = withBeforeClasses(statement); // 使用Statement对@BeforeClass逻辑进行包装
statement = withAfterClasses(statement); // 使用Statement对@AfterClass逻辑进行包装
statement = withClassRules(statement); // 使用Statement对@ClassRule逻辑进行包装
}
return statement;
}
protected Statement childrenInvoker(final RunNotifier notifier) {
// 创建Statement对象,但并不触发执行
return new Statement() {