猿问

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

在使用 TestNG 的项目中是否可以有超过 1 个 IAnnotationTransformer 实现?我正在使用 TestNg 版本 7.0.0。



元芳怎么了
浏览 83回答 1
1回答

喵喔喔

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);    }  }}
随时随地看视频慕课网APP

相关分类

Java
我要回答