2017-09-25 3 views
0

J'ai des tests instables dans le projet avec des annotations comme '@Test (retryAnalyzer = RetryAnalyzer.class)' (runner-TestNG). Dans la classe RetryAnalyzer, implémentée la logique de tentative.Extension d'annotation de test NG

Comment créer une annotation personnalisée qui étendra l'annotation @Test et aura la valeur par défaut de retryAnalyzer? (@Test (retryAnalyzer = RetryAnalyzer.class) -> @UnstableTest)

Merci.

Répondre

1

Voici un moyen facile de le faire.

  • Créez votre annotation personnalisée (@UnstableTest dans votre cas)
  • Construire une implémentation de org.testng.IAnnotationTransformer dans laquelle vous testez l'objet Method qui se décline en tant que paramètre pour la méthode transform() et voir si elle a l'annotation et si oui , puis injectez l'annotation.

Voilà comment cela peut ressembler à:

L'annotation marqueur qui marque les tests floconneux

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

Le transformateur d'annotation

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); 
    } 
} 

Maintenant, ajoutez cet écouteur à l'aide le <listeners> tag.

Cela devrait faire l'affaire.