首先建立一個接口,以下:
@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
public int order();
}
接着建立一個類,以下,繼承BlockJUnit4ClassRunner:這個是按照order的大小執行的,小的先執行,如order爲1的,比order爲2的先執行。
public class OrderedRunner extends BlockJUnit4ClassRunner {
public OrderedRunner(Class<?> klass) throws InitializationError { super(klass);
} @Override protected List<FrameworkMethod> computeTestMethods() {
List<FrameworkMethod> list = super.computeTestMethods();
Collections.sort(list, new Comparator<FrameworkMethod>() {
@Override
public int compare(FrameworkMethod f1, FrameworkMethod f2) {
Order o1 = f1.getAnnotation(Order.class);
Order o2 = f2.getAnnotation(Order.class);
if (o1 == null || o2 == null) return -1; return o1.order() - o2.order();
} }); return list;
} }
最後在你但願按順序跑的test suite裏面,按下面的加annotation:
@RunWith(OrderedRunner.class)
public class SomethingTest {
@Test
@Order(order=2)
public void testUpdateArticle() {
// test update } ide
@Test
@Order(order=1)
public void testInsertArticle() {
// test insert }
@Test
@Order(order=3)
public void testDeleteArticle() {
// test delete } ui
} blog
參考: 繼承
http://blog.163.com/wendy_xiaoyue/blog/static/190401051201302445653319/ 接口
http://stackoverflow.com/questions/3089151/specifying-an-order-to-junit-4-tests-at-the-method-level-not-class-level ci