2016-08-11 3 views
2

オーバーライドされたメソッドIAnnotationTransformerインターフェイスのトランスフォームメソッドは、リスナーが@listenerアノテーションを使用して内部的に実装されているときに呼び出されません。 TestNG.xmlIAnnotationTransformerインターフェイスのオーバーライドされたトランスフォームメソッドが呼び出されない/実行されない

テストクラス

@Listeners(Annotation.AnnotationTransform.class) 
public class factory { 

    @ 
    Test(priority = 1, invocationCount = 3) 
    public void t1() { 
     System.out.println("Method is t1, parameter is " + "one"); 
     AssertJUnit.assertTrue(true); 
    } 

    @ 
    Test(priority = 2) 
    public void t2() { 
     System.out.println("Method is t2, parameter is " + "two"); 
    } 

    @ 
    Test(priority = 3) 
    public void t3() { 
     System.out.println("Method is t3"); 
    } 
} 

リスナクラス

public class AnnotationTransform implements IAnnotationTransformer, IRetryAnalyzer { 
    @Override 
    public void transform(ITestAnnotation annotation, Class testClass, 
     Constructor testConstructor, Method testMethod) { 
     if (testMethod.getName().equals("t1")) { 
      System.out.println("set data provider for " + testMethod.getName()); 
      annotation.setInvocationCount(10); 
     } else if (testMethod.getName().equals("t3")) { 
      System.out.println("set data provider for " + testMethod.getName()); 
     } else if (testMethod.getName().equals("t2")) { 
      System.out.println("Disable " + testMethod.getName()); 
      annotation.setEnabled(false); 
     } 
    } 
} 

から実行するときには、「TestNGのテストとして実行」の変換方法を呼び出していないとして、上記のコードを実行して正常に動作している間 testNG.xmlファイルから 'TestNG Suiteとして実行'を実行すると問題ありません。

<?xml version="1.0" encoding="UTF-8"?> 
<suite name="Suite" parallel="false" > 
<listeners> 
    <listener class-name="Annotation.AnnotationTransform" /> 
</listeners> 

<test name="Test" preserve-order="true"> 
    <classes> 
     <class name="Annotation.factory" /> 
    </classes> 
</test> 
</suite> 

答えて

1

testng.xmlのIAnnotationTransformerを実装するすべてのリスナークラスについて言及する必要があります。これは、@ listenerアノテーションがそれを受け取らないためです。 TestNGのドキュメントから

-

@Listeners注釈はIAnnotationTransformerとIAnnotationTransformer2以外org.testng.ITestNGListenerを拡張する任意のクラスを含めることができます。その理由は、これらのリスナーは処理の初期段階で知っておく必要があるため、TestNGでアノテーションを書き換えることができるため、testng.xmlファイルでこれらのリスナーを指定する必要があるからです。

URL - http://testng.org/doc/documentation-main.html#testng-listeners

+0

ありがとう@Grasshopper、私は今問題を理解しています。私は非常に慎重にドキュメントを読む必要があると思う:P しかし、これは私たちにTestNG.xmlファイルを委任させるものです。 – RamaKrishna

+0

問題ありません。私はいくつかの必要なポイントを得るので、任意のチャンスはあなたのために働いた答えをマークすることができます:)。ありがとう – Grasshopper

+0

マーケティングのための適格ではありません15名の評判の下での – RamaKrishna

関連する問題