测试NG注释扩展

时间:2017-09-25 14:17:50

标签: java testing testng

我在项目中有一些不稳定的测试,注释类似'@Test(retryAnalyzer = RetryAnalyzer.class)'(runner-TestNG)。在RetryAnalyzer类中实现了重试逻辑。

如何创建自定义注释,它将扩展@Test注释并具有retryAnalyzer的默认值? (@Test(retryAnalyzer = RetryAnalyzer.class) - > @UnstableTest)

感谢。

1 个答案:

答案 0 :(得分:1)

这是一种简单的方法。

  • 创建自定义注释(在您的情况下为@UnstableTest
  • 构建org.testng.IAnnotationTransformer的实现,其中您测试作为Method方法的参数的transform()对象,看看它是否有您的注释,如果是,则注入注释

以下是它的样子:

标记片状注释标记片状测试

@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({METHOD})
@interface UnstableTest {}

注释转换器

public static class UnstableTestInjector implements IAnnotationTransformer {

    @Override
    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
        if (testMethod == null) {
            return;
        }

        UnstableTest unstableTest = testMethod.getAnnotation(UnstableTest.class);
        if (unstableTest == null) {
            return;
        }
        annotation.setRetryAnalyzer(TryAgain.class);
    }
}

现在使用<listeners>标记添加此侦听器。

应该这样做。