我目前使用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);
}
如果可以做到這一點,將解決我的問題,
乾杯
爲什麼羣體不適合用途? –
嗯 - 沒有什麼開箱就會給你。考慮編寫一個外部腳本作爲預測試或beforesuite運行 - 生成這些方法的列表 - 您可以在註釋轉換器中禁用這些方法。一些方法:http://stackoverflow.com/questions/930289/how-can-i-find-all-the-methods-that-call-a-given-method-in-java。你可以在文件中做一個grep或者在一個包含測試的快速循環中考慮一些解決方案 –