概述
JUnitCore作为JUnit4的入口类(包含了静态的main方法),定义了一系列方法来启动JUnit完成对测试类的反射执行
编程方式使用 :
public static void main(String[] args) { Result result = JUnitCore.runClasses(MyTest.class); // 测试类的class对象 for (Failure failure : result.getFailures()) { // 对于执行失败的情况打印失败信息 System.out.println(failure.toString()); } }
启动流程
1、创建一个默认的Computer(负责调用RunnerBuilder创建Runner实例),调用以下代码
public static Result runClasses(Computer computer, Class<?>... classes) {
return new JUnitCore().run(computer, classes);
}
2、根据传入的class对象,构造一个Request,代码如下
3、根据reqeust获取runner并启动
public Result run(Computer computer, Class<?>... classes) { return run(Request.classes(computer, classes)); }
根据不同的注解创建不同的RunnerBuilder,比如@Test的话就是JUnit4Builder
在创建Runner时会扫描和验证加在类和方法上的注解来构造正确的测试逻辑
public static Request classes(Computer computer, Class<?>... classes) { try { AllDefaultPossibilitiesBuilder builder = new AllDefaultPossibilitiesBuilder(); Runner suite = computer.getSuite(builder, classes); return runner(suite); } catch (InitializationError e) { return runner(new ErrorReportingRunner(e, classes)); } }
public Result run(Request request) {
return run(request.getRunner());
}
public Result run(Runner runner) {
Result result = new Result();
RunListener listener = result.createListener();
notifier.addFirstListener(listener);
try {
notifier.fireTestRunStarted(runner.getDescription());
runner.run(notifier);
notifier.fireTestRunFinished(result);
} finally {
removeListener(listener);
}
return result;
}
时序图