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);
? ? }
? }
}
添加回答
舉報