web-dev-qa-db-ja.com

JUnit 4ですべてのテストを実行する

プロジェクト内のすべてのテストをプログラムで実行できるようにしたい。私はEclipseに「JUnitテストとして実行」構成があり、プロジェクト内のすべてのテストを何らかの方法で取得して実行することを知っています。プログラムのリストをプログラムで取得して実行する方法はありますか?それとも、すべてのテストケース(700以上すべて)を手動でリストすることなく、すべてのテストケースを含むテストスイートを構築するための良い方法はありますか?

私はEclipseで「新規...->テストスイート」オプションを試しましたが、これはJUnit 3でのみ機能するようです。TestCaseから拡張してテストを識別します。

テストクラスはJUnit 4であるため、それらの唯一の際立った特徴は注釈であり、命名規則はなく、TestCaseからのサブクラス化はありません。

前もって感謝します!

31
alexloh

それはあなたの当面の問題を実際に解決するわけではありませんが、スイートやスイートのスイートを作成することは非常に有用な一般的な方法です。 PackageFooSuiteなどのパッケージの場合は、これらのスイートをModuleFooSuiteなどの1つ以上のスイートに再度アセンブルし、AllTestsSuiteなどのトップレベルスイートを1つ作成します。そうすれば、現在取り組んでいるパッケージのサブモジュールテストだけでなく、すべてのテストを1つのステップで簡単に実行できます(また、常にすべてを実行する場合よりもテストをすばやく実行できます)。

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests
23
Fabian Steeg

他の答えのどれも私のためにそれをしませんでした。実行する必要のある40kのテストがあったため、手動ですべてのクラスをリストすることはできませんでした。

ClasspathSuite でそれを行いました。クラスパス内のすべてのJunit4およびJunit3テストケースを実行するテストスイートは次のとおりです。

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        /* main method not needed, but I use it to run the tests */
        public static void main(String args[]) {
                JUnitCore.runClasses(RunAllSuite.class);
        }
}

コマンドラインから実行する必要があったので、これは私がやったことです:

  1. ダウンロードされたcp-1.2.6.jar
  2. 前述のRunAllSuiteを作成する
  3. クラスjavac RunAllSuite.Java -cp cpsuite-1.2.6.jar;junit-4.8.1.jarをコンパイルします
  4. クラスパスJava -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuiteのターゲットテストで実行します

以上です。上記のRunAllSuiteを使用すると、コード内の任意の場所で、クラスパス内のすべてのテストを実行するJUnitCore.runClasses(RunAllSuite.class)を実行できます。 ClasspathSuiteホームページで説明されている他の構成オプションもあります。

上記のクラスは何も出力しないことにも注意してください。それが必要な場合は、行うことができます

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import org.junit.internal.TextListener;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        public static void main(String args[]) {
                JUnitCore junit = new JUnitCore();
                junit.addListener(new TextListener(System.out));
                junit.run(RunAllSuite.class);
        }
}
15
eis

Eclipseの場合(私は4.6.1を使用しています)-プロジェクトフォルダーを右クリックし、[別のユーザーとして実行]を選択し、[JUnitテスト]を選択します。

そのプロジェクトのすべてのテストを実行します。パッケージも同じです。

3
Carlos Rendon

surefire plugin を使用してmaven内からこれをかなり簡単に行うことができます。通常、プロジェクトをEclipseの使用状況と比較する前に、コマンドラインからプロジェクトをクリーンアップ/コンパイル/インストールします(mvn Eclipse:clean Eclipse:eclipse)そして、pomでテストスイートを定義して、実行するたびにまとめて実行するすべてのテストをリストすることができますmvn install。プログラムで正確に呼び出すのではなく、まとめて呼び出すことができます。

3
davek

Springを使用している私の頭の上:

  • @Testアノテーションが付けられたメソッドを持つクラスに一致するTypeFilterを実装します(スーパークラスを考慮することを忘れないでください)
  • 最上位のテストパッケージでクラスパススキャンを呼び出す
  • スキャン結果を使用してJUnitRunnerを呼び出す

クラスパススキャンとカスタムタイプフィルターの詳細 こちら

2
Axel Fontaine

[構成の実行]ダイアログボックスのEclipse Indigo(おそらくHelios)を使用すると、選択したプロジェクト、パッケージ、またはソースフォルダーですべてのテストを実行できるようになりました。

また、Eclipseからの優れたリファレンスとして、記事 EclipseでのJUnit 4.xを使用したJavaユニットテスト があります。

1
Mookie Wilson

JUnit Suiteアノテーションの使用もお勧めします。 詳細についてはリンク に従ってください。

0
cmcginty