如果你确定你 真的 想这样做:有可能是一个更好的办法,但是这是我能拿出…
JUnit4有一个注释:
@RunWith它使您可以覆盖测试的默认Runner。
在您的情况下,您将需要创建一个特殊的子类
BlockJunit4ClassRunner,并重写
computeTestMethods()以按照您希望它们执行的顺序返回测试。例如,假设我想以相反的字母顺序执行测试:
public class OrderedRunner extends BlockJUnit4ClassRunner { public OrderedRunner(Class klass) throws InitializationError { super(klass); } @Override protected List computeTestMethods() { List list = super.computeTestMethods(); List copy = new ArrayList(list); Collections.sort(copy, new Comparator() { public int compare(frameworkMethod o1, frameworkMethod o2) { return o2.getName().compareTo(o1.getName()); } }); return copy; }}@RunWith(OrderedRunner.class)public class OrderOfTest { @Test public void testA() { System.out.println("A"); } @Test public void testC() { System.out.println("C"); } @Test public void testB() { System.out.println("B"); }}运行此测试将产生:
C乙一个
对于您的特定情况,您需要一个比较器,该比较器按照您希望它们执行的顺序按名称对测试进行排序。(我建议使用谷歌Guava类之类的方法来定义比较器
Ordering.explicit("methodName1","methodName2").onResultOf(...);,其中onResultOf提供了一个将frameworkMethod转换为其名称的函数…尽管显然您可以自由地实现所需的任何方式。


