Junit自定義同一文件各個測試方法執行順序


首先建立一個接口,以下:
@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

相關文章
相關標籤/搜索