4

コマンドラインからjunitを実行するには、次のことができることを知っています:

java org.junit.runner.JUnitCore TestClass1 [...その他のテストクラス...]

ただし、多くのテストを一緒に実行したいのですが、「TestClass1 TestClass2 TestClass3...」と手動で入力するのは非効率的です。

現在、すべてのテスト クラスをディレクトリ (パッケージを示すサブディレクトリがあります) に整理しています。コマンドラインからjunitを実行して、これらのテストクラスを一度に実行させる方法はありますか?

ありがとう。

4

2 に答える 2

5

基本的にこれを行うには 2 つの方法があります。シェル スクリプトを使用して名前を収集するかClassPathSuite、Java クラスパスを使用して特定のパターンに一致するすべてのクラスを検索します。

Java では、クラスパス スイート メソッドの方がより自然です。この SO 回答は、ClassPathSuite の最適な使用方法を説明しています。

シェル スクリプトの方法は少し扱いに​​くく、プラットフォーム固有であり、テストの数によっては問題が発生する可能性がありますが、何らかの理由で ClassPathSuite を回避しようとしている場合は、うまくいきます。この単純なものは、すべてのテスト ファイルが "Test.java" で終わることを前提としています。

#!/bin/bash
cd your_test_directory_here
find . -name "\*Test.java" \
    | sed -e "s/\.java//" -e "s/\//./g" \
    | xargs java org.junit.runner.JUnitCore
于 2012-10-24T01:38:57.953 に答える
1

これを実現するために、Ant ビルドファイルを作成できることがわかりました。サンプルの build.xml は次のとおりです。

<target name="test" description="Execute unit tests">
    <junit printsummary="true" failureproperty="junit.failure">
        <classpath refid="test.classpath"/>
        <!-- If test.entry is defined, run a single test, otherwise run all valid tests -->
        <test name="${test.entry}" todir="${test.reports}" if="test.entry"/>
        <batchtest todir="tmp/rawtestoutput" unless="test.entry">
            <fileset dir="${test.home}">
                <include name="**/*Test.java"/>
                <exclude name="**/*AbstractTest.java"/>
            </fileset>
            <formatter type="xml"/>
        </batchtest>
    <fail if="junit.failure" message="There were test failures."/>
</target>

このビルド ファイルを使用して、単一のテストを実行する場合は、次を実行します。

ant -Dtest.entry=YourTestName

複数のテストをバッチで実行する場合<batchtest>...</batchtest> は、上記の例に示すように、対応するテストを の下に指定します。

于 2012-10-24T04:16:47.317 に答える