class 级别的 TestNg IAnnotationTransformer 侦听器

TestNg IAnnotationTransformer listener on the class level

我需要有一个 IAnnotationTransformer 来在运行时操作 @Test 注释。我还想在 class 级别而不是 TestNG XML.

级别上定义此注释
@Listeners(MyAnnotationTransformer.class)
public class TestClass {
   ...
}

MyAnnotationTransformer.java:

public class MyAnnotationTransformer implements IAnnotationTransformer {

    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {

        System.out.println("Gotcha!!");
    }
}

问题是在执行过程中没有调用 MyAnnotationTransformer 的转换方法。

但是,如果我在 XML 级别提供 MyAnnotationTransformer Listener,则成功。

<listeners>
        <listener class-name="com.debugger89.testng.MyAnnotationTransformer" />
</listeners>

官方文档没有提到这样的限制。这是一个错误吗? 使用 TestNG 版本 7.4.0

看看 javadoc:

https://javadoc.io/doc/org.testng/testng/latest/org/testng/annotations/Listeners.html

Any class that implements the interface ITestNGListener is allowed, except IAnnotationTransformer which need to be defined in XML since they have to be known before we even start looking for annotations.

IAnnotationTransformer可以定义

  • 在XML

  • 通过命令行:java org.testng.TestNG -listener MyAnnotationTransformer testng.xml

  • 以编程方式

    TestNG testNg = new TestNG();
    testNg.addListener(new MyAnnotationTransformer());
    

另见 https://github.com/cbeust/testng/issues/446