2017-03-03 17 views
0

我目前使用IAnnotationTransformer排除其中的名稱中包含特定字符串的XML中列出的所有測試,例如:如何獲取testMethod調用的所有方法? (Java中,TestNG的,IAnnotationTransformer)

@Override 
@SuppressWarnings("rawtypes") 
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
    if(testMethod.getName().contains("StringGoesHere")){ 
      annotation.setEnabled(false); 
     } 

這工作得很好,但是由於我的測試的命名約定以及我需要排除的大量測試,理想的解決方案是找到一種排除測試的方法,如果它調用特定的方法。比如,我要排除的呼籲方法.clickUserSettings()如下所示的所有測試:

@Test 
public void editUserDetailsOnStackOverflow() { 
    final StackOverflow so = stackOverflow.loginAsMe() 
      .clickUserSettings() 
      .changeUserEmail() 
      .clickSave() 
      .assertChangeSuccessful(); 
} 

有誰知道我如何能夠實現這一目標?我覺得我已經探索過所有其他途徑(類,包,testMethods,groups,xml等),並且必須以這種方式完成這個任務,原因是我目前有40,000個測試(其中15,000個可能會被排除在外由測試儀設置的browserMode變量)這是一般的想法,我希望能實現:

@Override 
@SuppressWarnings("rawtypes") 
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
    if(testMethod.getAllCalledMethods.contains(".clickUserSettings()")){ 
      annotation.setEnabled(false); 
     } 

如果可以做到這一點,將解決我的問題,

乾杯

+1

爲什麼羣體不適合用途? –

+0

嗯 - 沒有什麼開箱就會給你。考慮編寫一個外部腳本作爲預測試或beforesuite運行 - 生成這些方法的列表 - 您可以在註釋轉換器中禁用這些方法。一些方法:http://stackoverflow.com/questions/930289/how-can-i-find-all-the-methods-that-c​​all-a-given-method-in-java。你可以在文件中做一個grep或者在一個包含測試的快速循環中考慮一些解決方案 –

回答

0

這不是可能與TestNG。 TestNG只能看到註釋了其註釋的方法,並且不知道TestNG方法在執行過程中所穿過的代碼路徑。 [在這裏,我假設方法clickUserSettings()是一種實用工具方法,你@Test方法也許調入,作爲其執行的一部分]

所以,你有兩個選擇

  1. 訴諸使用羣體,其中所有這些方法會調用clickUserSettings()作爲特定組的一部分,然後從執行中排除該組。
  2. 創建您自己的自定義註釋,註釋所有使用此批註調用clickUserSettings()的方法,然後修改當前的AnnotationTransformer以在方法級別或在類級別查找此批註。
相關問題