如何获取testMethod调用的所有方法? (Java,TestNG,IAnnotationTransformer)

时间:2017-03-03 13:18:33

标签: java testing junit annotations testng

我目前正在使用IAnnotationTransformer来排除XML中列出的所有测试,这些测试在其名称中包含特定的字符串,例如:

import {smoothScrollPolyFill} from 'smoothscroll-polyfill';
const polyfill = smoothScrollPolyFill.polyfill();

这非常有效,但是由于我的测试的命名惯例以及我需要排除的大量测试,理想的解决方案是找到一种方法来排除测试,如果它调用特定的方法。例如,我想排除所有调用方法.clickUserSettings()的测试,如下所示:

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

有谁知道我怎么能够实现这个目标?我觉得我已经探索了所有其他途径(类,包,testMethods,组,xml等)以及必须以这种方式完成的原因是因为我目前有40,000个测试(其中15,000个可能会被排除在外在测试人员设置的browserMode变量上)这是我希望实现的一般想法:

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

如果可以这样做,它将解决我的问题,

干杯

1 个答案:

答案 0 :(得分:0)

TestNG无法做到这一点。 TestNG只能查看使用其注释注释的方法,并且不知道TestNG方法在执行过程中遍历的代码路径。 [这里我假设方法clickUserSettings()是一个实用方法,你的@Test方法可能会调用,作为执行的一部分]

所以你有几个选择

  1. 使用群组,其中所有调用clickUserSettings()的方法作为特定群组的一部分,然后将该群组排除在执行之外。
  2. 创建您自己的自定义注释,使用此注释注释所有调用clickUserSettings()的方法,然后修改当前的AnnotationTransformer以在方法级别或类级别查找此注释。 / LI>