2017-03-03 6 views
0

私は現在、例えば、自分の名前に特定の文字列を含むXMLに記載されているすべてのテストを除外するIAnnotationTransformerを使用しています。しかし起因して、これは完璧にうまく機能testMethodによって呼び出されるすべてのメソッドを取得するにはどうすればよいですか? (Javaの、TestNGの、IAnnotationTransformer)

@Override 
@SuppressWarnings("rawtypes") 
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
    if(testMethod.getName().contains("StringGoesHere")){ 
      annotation.setEnabled(false); 
     } 

私のテストの命名規則、および私が除外しなければならない膨大な量のテストでは、理想的な解決方法は、特定のメソッドを呼び出す場合にテストを除外する方法を見つけることです。例えば、私は方法の.clickUserSettings要請するすべてのテスト()を以下に示し除外したい:

@Test 
public void editUserDetailsOnStackOverflow() { 
    final StackOverflow so = stackOverflow.loginAsMe() 
      .clickUserSettings() 
      .changeUserEmail() 
      .clickSave() 
      .assertChangeSuccessful(); 
} 

を誰もが、私はこれを達成することができるかもしれない方法を知っていますか?私は他のすべての手段(クラス、パッケージ、testMethods、グループ、xmlなど)を探検したような気がします。このようにしなければならない理由は、現在40,000テスト(15,000件がテスターに​​よって設定されたbrowserMode変数で)これは私が達成するために期待していた一般的な考え方です:

@Override 
@SuppressWarnings("rawtypes") 
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
    if(testMethod.getAllCalledMethods.contains(".clickUserSettings()")){ 
      annotation.setEnabled(false); 
     } 

これは、それは私の問題を解決するに行うことができる場合は、

乾杯

+1

なぜグループが目的に適していないのですか? –

+0

まあ、箱からすぐに何もあなたにこれを与えることはありません。これらのメソッドのリストを生成する、事前テストとして実行する外部スクリプトを作成することを検討してください。このスクリプトは、アノテーショントランスフォーマで無効にすることができます。いくつかの方法:http://stackoverflow.com/questions/930289/how-can-i-find-all-the-methods-that-c​​all-a-given-method-in-javaあなたは、ファイルやいくつかのソリューションを考えるあなたの含まれているテストのクイックループでgrepを行うことができます –

答えて

0

これではありませんTestNGで可能です。 TestNGは、アノテーションで注釈を付けられ、その実行中にTestNGメソッドが横断するコードパスを認識しないメソッドに対してのみ可視性を持ちます。あなたはここですべてのグループを使用するオプションがいくつ

  1. リゾートを持っているので、

    を[ここに私はこの方法clickUserSettings()は、その実行の一環として、あなたの@Test方法は多分に呼び出すユーティリティメソッドであると仮定しています]特定のグループの一部としてclickUserSettings()を呼び出し、そのグループを実行から除外するメソッド。

  2. 独自のカスタム注釈を作成し、この注釈を使用してclickUserSettings()を呼び出すすべてのメソッドに注釈を付け、現在のAnnotationTransformerを変更して、メソッドレベルまたはクラスレベルのいずれかでこの注釈を探します。
関連する問題