コマンドラインからJUnitテストケースを実行する方法


333

コマンドラインからJUnitテストケースを実行したいと思います。これどうやってするの?


同様のandroid junit質問:stackoverflow.com/q/11144466/611007
n611x007 14



javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.java私のために働いた。最後のドットに注意してください-それは重要です!
パーサー

回答:


274

以下のためのJUnit 5.Xそれはです:

java -jar junit-platform-console-standalone-<version>.jar <Options>

https://stackoverflow.com/a/52373592/1431016で簡単な概要を、https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcherで詳細をご覧ください

以下のためのJUnit 4.Xそれは本当にです:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

ただし、JUnit 3.Xを使用している場合は、クラス名が異なることに注意してください。

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

クラスファイルを含むJARまたはディレクトリをクラスパスに追加し、セミコロン(Windows)またはコロン(UNIX / Linux)で区切る必要がある場合があります。環境によって異なります。

編集:例として現在のディレクトリを追加しました。環境とアプリケーションのビルド方法によって異なります(bin /、build /、またはmy_application.jarなどの場合もあります)。Java 6+はクラスパスでグロブをサポートしていることに注意してください。

java -cp lib/*.jar:/usr/share/java/junit.jar ...

それが役に立てば幸い。テストを書いてください!:-)


@IzapテストでJUnit4とJUnit3のどちらを使用しているかをプログラムで判断するアイデアはありますか?
Goaler444 2013年

2
Class.forNameと思います。私が最後にJavaでプログラミングしていたのは何年かです...
lzap '11

アンドロイドを使用している場合はどうなりますか?
n611x007 2014

1
「-cp」引数(つまり、CLASSPATH)のドキュメントは、こちら(Java 7、Unix)こちら(チュートリアル)ここ(Java 8、UNIX)こちら(Java 8、Windows)です。どうやらクラスパスのワイルドカードがサポートされるようになりました。
David Tonhofer

1
反対票。JUnit 4.xの場合は正しくありません。[クラスを見つけることができませんでした:[テストクラス名]」という指示は、[テストクラス名]がクラスパスにある場合でも表示されます。
フィリップレゴ

117

メイヴェンウェイ

Mavenを使用している場合は、次のコマンドを実行してすべてのテストケースを実行できます。

mvn clean test

または、以下のように特定のテストを実行できます

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

target \ surefire-reportsフォルダー内のレポートファイルの代わりに、コンソールにスタックトレース(存在する場合)を表示する場合は、ユーザープロパティsurefire.useFileをfalseに設定します。例えば:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

グラドルウェイ

Gradleを使用する場合は、次のコマンドを実行してすべてのテストケースを実行できます。

gradle test

または、以下のように特定のテストを実行できます

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

さらに情報が必要な場合は、-stacktrace、-info、-debugなどのオプションを検討できます。

たとえば、infoロギングレベル--infoでGradleを実行すると、実行中の各テストの結果が表示されます。例外がある場合は、スタックトレースが表示され、問題が何であるかが示されます。

gradle test --info

全体的なテスト結果を確認したい場合は、たとえばブラウザでレポートを開くことができます(UbuntuでGoogle Chromeを使用して開きます)。

google-chrome build/reports/tests/index.html

蟻道

Antビルドファイルbuild.xmlを設定したら、次のようにコマンドラインからJUnitテストケースを実行できます。

ant -f build.xml <Your JUnit test target name>

以下のリンクをたどると、AntビルドファイルでJUnitテストを構成する方法の詳細を読むことができます:https : //ant.apache.org/manual/Tasks/junit.html

通常の方法

Maven、Gradle、Antを使用しない場合は、次の方法を使用できます。

まず、テストケースをコンパイルする必要があります。例(Linuxの場合):

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

次に、テストケースを実行します。例えば:

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName

1
この回答には、複数のテクノロジー、称賛の例が含まれていることが好きです。
Josie Thompson、

最後のアプローチを使用したグルーヴィーなテストはどうですか?
midori

1
当然のゴールデンバッジ;)
Eric Duminil

Gradleのバージョンをありがとう!賞賛!
1

52

@lzapが与えた答えは良い解決策です。ただし、追加する必要があることを追加したいと思います。現在のディレクトリが除外されないように、クラスパスに追加します。その結果、独自のクラスが除外されます。これは、一部のプラットフォームで発生しました。したがって、JUnit 4.xの更新バージョンは次のようになります。

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

1
それはセミコロンであるはずですか?
パニー2013

14
@panny Windowsではセミコロンです。n * nix環境(少なくともOSXと私が使用したすべてのLinuxディストリビューション)では、コロンを使用します。
rand_acs 2013

1
@rand_acsテストクラス名は完全に分類されたクラス名である必要がありますか?
Goaler444 2013年

1
@ Goaler444はい、すべての名前空間を指定して、常にフルネームを使用します。
rand_acs 2013年

22

JUnit.jarがクラスパスにあることを確認してから、コンソールからコマンドラインランナーを呼び出します

java org.junit.runner.JUnitCore [テストクラス名]

リファレンス:junit FAQ


4
また、プロジェクトの残りのクラスパスも設定する必要があります。
Thilo

これは、[テストクラス名]がクラスパスにある場合でも、「クラスを見つけることができませんでした:[テストクラス名]」を与えるだけです。
フィリップレゴ2018

19

JUnit 4.12では、以下は機能しませんでした。

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

どうやら、JUnit 4.11以降hamcrest-core.jarでは、クラスパスにも含める必要があります。

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

JUnit 4.12でも同じ問題がありました。同様の解決策を思いついたが、私にとってはうまくいかず、JUnitCoreをロードできなかった。クラスパスにhamcrest-core.jarを含める必要がないため、基本的にはJUnit 4.8.2に切り替えました。
Vladimir Nazarenko

これはJUnit 4.12で実行する必要があることを確認しました。+1。
rayryeng 2017年

これは私のために働きました:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

Windowsでは

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [.class拡張子なしのテストクラス名]

たとえば c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...、テストクラスが複数ある場合などです。

-cpはクラスパスを表し、ドット(。)は既存のクラスパスを表しますが、セミコロン(;)は指定された追加のjarをclasspathに追加します。上記の例のように、junit-4.8.2がクラスパスで使用可能になり、JUnitCoreクラスを実行できます。ここでは、テストクラスを実行するために使用しました。

上記のコマンドラインステートメントは、コマンドプロンプト(つまりMSDos)からjunit(バージョン4+)テストを実行するのに役立ちます。

注:JUnitCoreはjunitテストを実行するためのファサードです。このファサードは4以上のバージョンのjunitに含まれています。


答えを簡潔に説明してください。
Mohit Jain 2014年

私はあなたの答えを簡潔に保つようにあなたに頼みませんでした。私はいくつかの説明(少なくとも簡単な説明)を追加するように要求しました。回答がどのように機能するかを説明することは良い習慣です。読者はそれを理解しているかもしれません。
Mohit Jain 2014年

それで、もし私が補足的なテストjarとバニラjunit jarを持っているなら、何かが実際に機能するためには、java -cpコマンドでそれらの両方を持っている必要がありますか?それほど多くのものを入力する必要がないように、これらすべてをコマンドラインに入力する必要がある方法はありますか?
Ungeheuer 2016年

5

実際、Junitテストを実行可能なJARにして、実行可能なjarをjava -jarとして呼び出すこともできます。


2
Eclipseで、JUnitプロジェクトを右クリックします-> [エクスポート]をクリックします-> [Javaを選択]-> [
実行可能なJAR

4

プロジェクトがMavenベースの場合、次のコマンドを使用して、モジュール「my-module」に属するテストクラスCustomTestからすべてのテストメソッドを実行できます。

mvn clean test -pl :my-module -Dtest=CustomTest

または、次のコマンドを使用して、テストクラスCustomTestから1つのテストメソッドmyMethodのみを実行します。

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

この機能を使用するには、Maven Surefireプラグインv.2.7.3以降とJunit 4が必要です。詳細はこちら:http ://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html




-1

プロジェクトがAntベースの場合は、コンソールから次のようなことができるはずです。

ant test

これが機能しない場合でも、プロジェクトがAntベースである場合は、実行ant -pしてプロジェクトの主なターゲットを一覧表示できます。


2
Qはantとは関係ありません
accuya 2013年

3
それが、私が「あなたのプロジェクトがアリベースの場合」と言った理由です。OPがantについて知らない可能性があることにも注意してください。
cherouvim 2013年

私はこのディレマを持っていました、ユニットテストファイルはEclipseによってソースとしてマークされたフォルダーにありませんでした。そのプロジェクトはantを使用してビルドします。これは、これらのJUnitテストを実行する適切な方法でした。
Andrzej Rehmann 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.