2

テストをランダムな順序で実行するカスタム ランナーを作成しようとしています。ランナー:

public class TestClassRunnerForParameters extends BlockJUnit4ClassRunner {
    public TestClassRunnerForParameters(Class<?> type) throws Exception {
        super(type);
    }

    protected java.util.List<org.junit.runners.model.FrameworkMethod> computeTestMethods() {
        java.util.List<org.junit.runners.model.FrameworkMethod> methods = super
                .computeTestMethods();
        Collections.shuffle(methods);
        return methods;
    }
}

パラメータ化されたテストでない場合、これは正常に機能します。パラメータテストを使用してこれを行うことは可能ですか? パラメータ化されたインターフェースを実装していますか?

4

2 に答える 2

1

エラーはかなり自己記述的だと思います:

カスタム ランナー クラス TestClassRunnerForParameters には、署名 TestClassRunnerForParameters(Class testClass) を持つパブリック コンストラクターが必要です。

あなたのクラスには、その署名を持つコンストラクターがありません。その唯一のコンストラクターには、パラメーターClass<?> typeList<Object[]> parameterListおよびがありint iます。後の 2 つの引数は削除する必要があります。さらに、そのコンストラクターはそうではありませんpublicpublicその前に追加する必要があります。

さらに、パラメータ化されたテストを作成しようとしている場合は、org.junit.runners.Parameterizedランナーがまさにそれを行うため、ランナーに興味があるかもしれません。ここに良いチュートリアルがあります。

于 2013-04-12T13:22:18.333 に答える
0

コンストラクターを追加するだけです(アドバイスに従って):

public TestClassRunnerForParameters(Class testClass) {
   ...
}

そして、コンストラクターに委任します。publicJUnit/Surefire はリフレクションを使用しているため、この場合はコンストラクターを使用する必要があります。

于 2013-04-12T13:20:42.063 に答える