4

yes / no値のすべてのtestmethodsのリストを含むテキストファイルを読み取り、TestCaseクラスに対してのみ「yes」とマークされたtestmethodsを選択し、Junitで実行する必要があります。

そこで、ファイルを読み取り、それをmap < TestCaseName、ArrayList_ofEnabledTestMethods >にグループ化するスクリプトを作成しました。それを実行するには、1つのオプションがAssume.assumeTrue()を使用することです。

しかし、私は別の方法で試してみたかったのです...各テストメソッドの前に余分な行を書く代わりに、カスタムランナー(ParentRunnerを拡張するABCSuite)を書いて、以下のようにTestSuiteファイルで使用することを計画しました:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(ABCSuite.class)
@Suite.SuiteClasses({TestCalc.class})
public class BatTest{

}

ここで、TestCalc.classには、前述のテキストファイルで「yes」とマークされているテストメソッドがすべて含まれています。

これを実現するためにParentRunnerクラス/JUnitライブラリを拡張する方法を教えてください 。良いチュートリアルがある場合、または前にこれに対処したリンクがある場合は、共有してください。

4

2 に答える 2

4

これを行うには、BlockJUnit4ClassRunnerを拡張します。

public class FilterRunner extends BlockJUnit4ClassRunner {
  private List<String> testsToRun = Arrays.asList(new String[] { "test1" });

  public FilterRunner(Class<?> klass) throws InitializationError {
    super(klass);
  }

  @Override
  protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
    Description description= describeChild(method);
    if (method.getAnnotation(Ignore.class) != null || !testsToRun.contains(method.getName())) {
      notifier.fireTestIgnored(description);
    } else {
      runLeaf(methodBlock(method), description, notifier);
    }
  }
}

好きなように記入できtestsToRunます。上記は、他のテストを無視としてマークします。あなたはこれを次のように使用します:

@RunWith(Suite.class)
@SuiteClasses({Class1Test.class})
public class TestSuite {
}

@RunWith(FilterRunner.class)
public class Class1Test {
  @Test
  public void test1() {
    System.out.println("test1");
  }

  @Test
  public void test2() {
    System.out.println("test2");
  }
}

これにより、次の出力が生成されます。

test1

@FilterRunnerを各テストクラスに追加したくない場合は、スイートでJUnitメソッドルールを定義する方法に対する私の答えを見てください。

于 2012-08-10T09:16:01.000 に答える
2

これを実装するJUnitの方法は、Filterの実装になります。Filterableを実装するランナーによってインスタンス化される必要があります。フィルタは、テストのツリーを介して再帰的に適用されます。したがって、そのフィルターを適用する必要があるのは、ベーススイートで1回だけです。

ランナーを拡張し、コンストラクターでフィルターを適用する必要があります。物事をより柔軟にするために、注釈を付けて適用する必要のあるフィルターを構成できます。

私にも同じ要件があり、それはうまくいきました。

于 2013-02-13T18:10:23.333 に答える