2

私は同様の質問をすべて見てきましたが、私の意見では、これに対する明確な答えはありません。テスト クラス (JUnit 4 ですが、JUnit 3 にも関心があります) があり、これらのクラス内からプログラムまたは動的に (コマンド ラインからではなく) 個々のテスト メソッドを実行したいと考えています。たとえば、5 つのテスト メソッドがありますが、実行したいのは 2 つだけです。これをプログラムまたは動的に (コマンド ラインや Eclipse などからではなく) 実行するにはどうすればよいでしょうか。

@Beforeまた、テストクラスにアノテーション付きのメソッドがある場合もあります。そのため、個々のテスト メソッドを実行する場合は、@Before事前に も実行する必要があります。どうすればそれを克服できますか?

前もって感謝します。

4

2 に答える 2

2

これは単純な単一メソッド ランナーです。JUnit 4 フレームワークに基づいていますが、必ずしも @Test で注釈が付けられていなくても、任意のメソッドを実行できます

    private Result runTest(final Class<?> testClazz, final String methodName)
            throws InitializationError {
        BlockJUnit4ClassRunner runner = new BlockJUnit4ClassRunner(testClazz) {
            @Override
            protected List<FrameworkMethod> computeTestMethods() {
                try {
                    Method method = testClazz.getMethod(methodName);
                    return Arrays.asList(new FrameworkMethod(method));

                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        };
        Result res = new Result();
        runner.run(res);
        return res;
    }

    class Result extends RunNotifier {
        Failure failure;

        @Override
        public void fireTestFailure(Failure failure) {
            this.failure = failure;
        };

        boolean isOK() {
            return failure == null;
        }

        public Failure getFailure() {
            return failure;
        }
    }
于 2012-11-28T13:55:13.710 に答える
0

これは、カスタムTestRunnerでのみ実行できると思います。テストを起動するときに、実行したいテストの名前を引数として渡すことができます。より洗練されたソリューションは、引数としてグループ名を取るカスタム アノテーション (@TestGroup としましょう) を実装することです。テストメソッドに注釈を付けて、一緒に実行したいテストに同じグループ名を付けることができます。ここでも、テストを起動するときにグループ名を引数として渡します。テスト ランナー内で、対応するグループ名を持つメソッドのみを収集し、それらのテストを起動します。

ただし、これに対する最も簡単な解決策は、個別に実行するテストを別のファイルに移動することです...

于 2012-11-28T13:11:47.077 に答える