为了账号安全,请及时绑定邮箱和手机立即绑定

一个项目中是否可以只有 1 个 IAnnotationTransformer 实现

一个项目中是否可以只有 1 个 IAnnotationTransformer 实现

元芳怎么了 2023-09-06 15:44:42
在使用 TestNG 的项目中是否可以有超过 1 个 IAnnotationTransformer 实现?我正在使用 TestNg 版本 7.0.0。
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

TestNG 目前仅允许您连接IAnnotationTransformer. 如果您尝试插入其中的多个,则将调用最后添加的一个。

作为替代方案,您可以构建自己的组合,IAnnotationTransformer该组合可用于迭代所有其他注释转换器实例。这是一个示例(可以在上面提到的 github 链接中找到)

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

import java.util.Arrays;

import java.util.List;

import org.testng.IAnnotationTransformer;

import org.testng.annotations.ITestAnnotation;

import org.testng.collections.Lists;

import org.testng.internal.ClassHelper;


public class CompositeTransformer implements IAnnotationTransformer {

  private static final String JVM_ARGS =

      "com.rationaleemotions.github.issue1894.Listener1, com.rationaleemotions.github.issue1894.Listener2";

  private List<IAnnotationTransformer> transformers = Lists.newArrayList();


  public CompositeTransformer() {

    // Ideally this would get a value from the command line. But just for demo purposes

    // I am hard-coding the values.

    String listeners = System.getProperty("transformers", JVM_ARGS);


    Arrays.stream(listeners.split(","))

        .forEach(

            each -> {

              Class<?> clazz = ClassHelper.forName(each.trim());

              IAnnotationTransformer transformer =

                  (IAnnotationTransformer) ClassHelper.newInstance(clazz);

              transformers.add(transformer);

            });

  }


  @Override

  public void transform(

      ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {

    for (IAnnotationTransformer each : transformers) {

      each.transform(annotation, testClass, testConstructor, testMethod);

    }

  }

}


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信