TestNG-阅读自定义注释详细信息

时间:2019-02-18 23:04:15

标签: java testng

要求:阅读自定义批注详细信息,并为所有套件的所有测试类生成报告。

尝试过的解决方案: 使用ITestListener实现了自定义监听器。但是除了下面的方法外,没有看到直接的方法来获取自定义注释详细信息作为测试方法的一部分。

@Override
public void onStart(ITestContext context) {
    ITestNGMethod[] testNGMethods = context.getAllTestMethods();
    for (ITestNGMethod testNgmethod : testNGMethods) {
        Method[] methods = testNgmethod.getRealClass().getDeclaredMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
                //Get required info
            }
        }
    }
}

内部循环为每个测试类触发近n*n(方法数量)次。我可以通过添加条件来控制它。

由于我是TestNG框架的新手,所以想了解实现我的要求的更好解决方案,即通过读取所有套件中所有测试方法的自定义注释详细信息来生成报告。

1 个答案:

答案 0 :(得分:1)

这是您的操作方式。

我正在使用7.0.0-beta3至今的TestNG最新发布版本,并使用Java8流

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;

public class MyListener implements ITestListener {

  @Override
  public void onStart(ITestContext context) {
    List<ITestNGMethod> methodsWithCustomAnnotation =
        Arrays.stream(context.getAllTestMethods())
            .filter(
                iTestNGMethod ->
                    iTestNGMethod
                            .getConstructorOrMethod()
                            .getMethod()
                            .getAnnotation(MyCustomAnnotation.class)
                        != null)
            .collect(Collectors.toList());
  }

  @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
  @Target({METHOD, TYPE})
  public static @interface MyCustomAnnotation {}
}