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 用例顺序