You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何随机运行JUnit测试中的指定数量用例?附自定义Runner实现

问题:如何从JUnit测试类中随机运行指定数量的测试用例?

现有测试套件类TestSuite和测试类TestA代码如下:

TestSuite.java

@RunWith(Suite.class)
@Suite.SuiteClasses({TestA.class})
public class TestSuite {
}

TestA.java

public class TestA {

    @Test
    public void test1(){
        System.out.println("test1");
    }

    @Test
    public void test2(){
        System.out.println("test2");
    }

    @Test
    public void test3(){
        System.out.println("test3");
    }
}

需求:从TestA的3个测试用例中随机运行其中2个,已知需要创建自定义Runner,求相关实现示例。


解决方案

自定义一个继承自BlockJUnit4ClassRunner的Runner类,重写computeTestMethods方法实现随机筛选指定数量的测试用例:

public class TestRunner extends BlockJUnit4ClassRunner {

    private static final int MAX_TESTS_TO_RUN = 2;
    
    public TestRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        // 获取所有测试方法
        List<FrameworkMethod> methods = super.computeTestMethods();

        // 打乱测试方法顺序
        List<FrameworkMethod> shuffledMethods = new ArrayList<>(methods);
        Collections.shuffle(shuffledMethods);

        // 返回前MAX_TESTS_TO_RUN个测试方法,兼容测试方法总数小于指定数量的场景
        return new ArrayList<>(shuffledMethods.subList(0, Math.min(methods.size(), MAX_TESTS_TO_RUN)));
    }
}

使用方式

在测试类TestA上添加@RunWith注解指定自定义Runner即可:

@RunWith(TestRunner.class)
public class TestA {
    // 测试方法保持不变
}

补充说明

如果测试类已配置其他Runner(比如Suite Runner),则需要通过自定义Rule来实现相同逻辑,而非替换原有Runner。


内容的提问来源于stack exchange,提问作者HELENDOUDOU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:45:59