package pack; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import junit.runner.Version; import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.InitializationError; public class OrderedRunner extends BlockJUnit4ClassRunner { @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface Order { public String[] value(); } public OrderedRunner(Class<?> klass) throws InitializationError { super(klass); } @Override protected List<FrameworkMethod> computeTestMethods() { List<FrameworkMethod> methods= new ArrayList<FrameworkMethod>(super.computeTestMethods()); Order order= getTestClass().getJavaClass().getAnnotation(Order.class); final List<String> orderedNames= Arrays.asList(order.value()); Collections.sort(methods, new Comparator<FrameworkMethod>() { public int compare(FrameworkMethod m1, FrameworkMethod m2) { String n1= m1.getName(); String n2= m2.getName(); int i1= orderedNames.indexOf(n1); int i2= orderedNames.indexOf(n2); return i1 < i2 ? -1 : 1; } }); return methods; } }