Junit4按顺序测试

在junit4测试中,我们经常会在一个测试类中编写多个测试方法,但有的时候我们需要这些测试方法按顺序执行,比如简单的增删改查测试,肯定先要增加后才能查改删,而删除后又不能修改,所以也需要一个顺序

首先编写一个Order接口:

package com.zt;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Order {

    int value() default 0;

}

编写OrderRunner类:

package com.zt;

import java.util.List;
import java.util.stream.Collectors;

import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
// Spring
// import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
// JUnit
import org.junit.runners.BlockJUnit4ClassRunner;

// Spring 继承
// public class OrderedRunner extends SpringJUnit4ClassRunner {
// JUnit 继承
public class OrderedRunner extends BlockJUnit4ClassRunner {

    // 测试用例的方法集合
    private static List<FrameworkMethod> testMethodList;

    public OrderedRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }

    // 重写 computeTestMethods 方法,按指定顺序排序
    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        if (testMethodList == null) {
            testMethodList = super.computeTestMethods().stream()
                    .sorted((m1, m2) -> {
                        // 根据测试用例上的 Order 注解来决定执行顺序
                        Order o1 = m1.getAnnotation(Order.class);
                        Order o2 = m2.getAnnotation(Order.class);
                        if (o1 == null || o2 == null) {
                            return 0;
                        }
                        return o1.value() - o2.value();
                    }).collect(Collectors.toList());
        }
        return testMethodList;
    }
}

之后只需要按照Order(1),Order(2)这样排序,即可实现按顺序执行

 

 

 

 参考链接:(23条消息) JUnit 中实现测试用例按指定顺序执行_sai_simon的博客-CSDN博客_junit 用例顺序

posted @ 2022-05-20 19:04  睡觉不困  阅读(190)  评论(0编辑  收藏  举报