JUnit4源代码学习笔记

junit3和junit4是两个非常不同的版本二者的内部实现有很大的不同所有的testcase都是在Runner下执行的, 可以将Runner理解为junit运行的容器, 默认情况下junit会使用BlockJUnit4ClassRunner作为所有testcase的执行容器。 如果要定制自己的junit, 则可以实现自己的Runner,最简单的办法就是JUnit4ClassRunner继承

以下是在eclipse里面运行的stack



对以下几个类做简单分析

ClassRequest继承自Request,Request是对于一次测试的抽象描述,旧版本的junit是不需要Request的,从junit4开始,主要是为了支持一些扩展的功能,比如filter, sorting等

再回到ClassRequest, 创建Runner

@Override
    public Runner getRunner() {
        return new AllDefaultPossibilitiesBuilder(fCanUseSuiteMethod).safeRunnerForClass(fTestClass);
    }

AllDefaultPossibilitiesBuilder继承自RunnerBuilder,

@Override
    public Runner runnerForClass(Class<?> testClass) throws Throwable {
        List<RunnerBuilder> builders= Arrays.asList(
                ignoredBuilder(),
                annotatedBuilder(),
                suiteMethodBuilder(),
                junit3Builder(),
                junit4Builder());

        for (RunnerBuilder each : builders) {
            Runner runner= each.safeRunnerForClass(testClass);
            if (runner != null)
                return runner;
        }
        return null;
    }

RunnerBuilder是构建runner的策略基类,

ignoredBuilder 会检查测试类是不是标记@Ignore,如果是的话,会创建IgnoredClassRunner, 说明这个测试类是被忽略的,所有的test case都不用运行

annotatedBuilder 会检查测试类是不是标记@RunWith,如果是的话,会创建IgnoredClassRunner,@RunWith注解告诉JUnit它使用org.junit.runner.Suite。这个运行机允许你手工地构建一个包含测试(可能来自许多类)的测试集。

junit3Builder判断测试类是否是pre-junit4的测试用例,是的话,创建JUnit38ClassRunner,

junit4Builder 创建junit3Builder BlockJUnit4ClassRunner

下面主要说一下Runner


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值