【问题标题】:How can I get all methods which are called by a testMethod? (Java, TestNG, IAnnotationTransformer)如何获取由 testMethod 调用的所有方法? (Java、TestNG、IAnnotationTransformer)
【发布时间】:2017-03-03 13:18:32
【问题描述】:

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

@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、组、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 运行的外部脚本 - 生成这些方法的列表 - 您可以在注释转换器中禁用它。一些方法:stackoverflow.com/questions/930289/…。您可以在文件中执行 grep 或快速循环包含的测试..想一些解决方案

标签: java testing junit annotations testng


【解决方案1】:

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

所以你有几个选择

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

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多