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

JUnit5:如何控制含@IncludeTags的@Suite中测试的执行顺序

控制JUnit 5带Tag的测试套件执行顺序

要指定测试类的执行顺序,尤其是让某个Tag的测试最后执行,有两种实用方案:

方案1:给测试类标记执行顺序

这种方式适合单个类精准控制顺序:

  1. 给测试类添加@Order注解,指定顺序数值(数值越小越先执行):
@Tag("Tag1")
@Order(1)
public class RunThisFirst { }

@Tag("Tag2")
@Order(2)
public class RunThisLast { }
  1. 在测试套件类上添加@ClassOrder(ClassOrderer.OrderAnnotation.class),启用基于@Order的类排序:
@Suite
@SelectPackages("com.tests")
@IncludeTags({
        "Tag1",
        "Tag2",
})
@ClassOrder(ClassOrderer.OrderAnnotation.class)
public class TestSuite { }

方案2:自定义Tag驱动的排序器

如果需要批量将某个Tag的所有测试类放到最后执行,不用逐个标记@Order,可以自定义类排序器:

  1. 实现ClassOrderer接口,按Tag分组排序:
import org.junit.jupiter.api.ClassDescriptor;
import org.junit.jupiter.api.ClassOrderer;
import org.junit.jupiter.api.ClassOrdererContext;
import java.util.ArrayList;
import java.util.List;

public class TagBasedClassOrderer implements ClassOrderer {
    @Override
    public void orderClasses(ClassOrdererContext context) {
        List<ClassDescriptor> classDescriptors = context.getClassDescriptors();
        List<ClassDescriptor> tag2Classes = new ArrayList<>();
        List<ClassDescriptor> otherClasses = new ArrayList<>();

        // 按Tag拆分测试类
        for (ClassDescriptor descriptor : classDescriptors) {
            if (descriptor.getTags().contains("Tag2")) {
                tag2Classes.add(descriptor);
            } else {
                otherClasses.add(descriptor);
            }
        }

        // 合并顺序:非Tag2类在前,Tag2类在后
        otherClasses.addAll(tag2Classes);
        context.getClassDescriptors().clear();
        context.getClassDescriptors().addAll(otherClasses);
    }
}
  1. 在测试套件中指定使用这个自定义排序器:
@Suite
@SelectPackages("com.tests")
@IncludeTags({
        "Tag1",
        "Tag2",
})
@ClassOrder(TagBasedClassOrderer.class)
public class TestSuite { }

注意事项

  • @ClassOrder注解需要JUnit 5.8及以上版本支持,请确保依赖版本符合要求。
  • 默认情况下JUnit 5会随机执行测试类,必须显式指定排序策略才能控制顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:15:42