2020-01-30

Junit4のテストをコンソールで実行する

unit-4.jarの実行方法を調べた.

用意したもの

  • junit-4.13.jar
  • hamcrest-core-1.3.jar
  • sampleプロジェクト
ディレクトリ構成
root/
  ┗ sample
       ┣ Add.java
       ┗ AddTest.java
Add.java
package sample;

public class Add {
	public int add(int a, int b){
		return a + b;
	}
}
AddTest.java
package sample;

import static org.junit.Assert.*;

public class AddTest {
	@org.junit.Test
	public void Test01(){
		Add add = new Add();
		assertEquals(5, add.add(2,3));
	}
}

テスト実行

コンパイル (カレントディレクトリ:root/sample)

クラスパスにjunitへのパスを指定しないとコンパイルできない.

javac -cp /path/to/junit-4.13.jar Add.java AddTest.java

テスト実行 (カレントディレクトリ:root/)

クラスパスにカレントディレクトリ,junit, hamcrestへのパスを指定しないと実行できない.

java -cp \
    .:/path/to/junit-4.13.jar:/path/to/hamcrest-core-1.3.jar \
    org.junit.runner.JUnitCore 
sample.AddTest

出力

JUnit version 4.13
.
Time: 0.01

OK (1 test)

エラーが出るとき

何かがおかしいと,以下のようなエラーが出力される.

java.lang.IllegalArgumentException: Could not find class [AddTest]
Exception in thread "main" java.lang.NoClassDefFoundError: 
    sample/AddTest (wrong name: AddTest)

確認する部分は以下.

  • クラスパスに,カレントディレクトリ,humcrest,junitへのパスを指定している.
  • テスト実行をパッケージの親ディレクトリで行なっている(今回の例でいうとroot/).
  • テストクラス名にパッケージ名をつけている(今回の例でいうと,AddTestではなく,sample.AddTest).
  • パッケージ名とディレクトリ名が正しい.