Возможно ли иметь только 1 внедрение IAnnotationTransformer в проекте - PullRequest
0 голосов
/ 28 сентября 2019

Можем ли мы иметь более 1 реализации IAnnotationTransformer в проекте, который использует TestNG?Я использую TestNg версии 7.0.0.

1 Ответ

1 голос
/ 29 сентября 2019

TestNG в настоящее время позволяет подключать только одну реализацию IAnnotationTransformer.Если вы попытаетесь подключить несколько из них, то последним, что было добавлено, является то, что будет вызвано.

Существует открытая проблема, которая отслеживает этот запрос.См. GITHUB-1894 .

В качестве альтернативы вы можете создать свой собственный составной 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);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...