1.環境
前回作成したMavenで構築したJavaプロジェクトに、テストを追加する。
前回記事
2.テストモジュールの作成
以下のフォルダ構成を作成する
C:
└ maven
└ demo
└ src
└ test
└ java
└ hello\
VSCodeにてCtrl+Shift+@
を入力してターミナル(PowerShell)を起動する
以下のコマンドでフォルダを作成してVSCodeでフォルダを開く
> mkdir C:\maven\demo\src\test\java\hello
> code -r C:\maven\demo
以下のモジュールを作成
- src/test/java/hello/GreeterTest.java
package hello;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import org.junit.Test;
public class GreeterTest {
private Greeter greeter = new Greeter();
@Test
public void greeterSaysHello() {
assertThat(greeter.sayHello(), containsString("Hello"));
}
}
Maven は、「surefire」というプラグインを使用して単体テストを実行する。
surefireのデフォルト構成は、src/test/java配下の*Test と一致する名前を持つすべてのクラスをコンパイルして実行する。
3.テストの実行
mvn test
コマンドを実行して、テストを実施する。
> mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.springframework:maven-test >-------------------
[INFO] Building maven-test 0.1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
(中略)
junit4/2.12.4/surefire-junit4-2.12.4.jar (37 kB at 100 kB/s)
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.641 s
[INFO] Finished at: 2020-11-24T13:38:48+09:00
[INFO] ------------------------------------------------------------------------
ビルドの最後でJUnitによるテストが実行されていることがわかる。
このテストの結果としては、Failures/Errorsがともに0件であり、結果としてビルドは成功する。
このテストがNGだった場合の動きを見てみる。
テスト用モジュールを以下のように修正。
package hello;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import org.junit.Test;
public class GreeterTest {
private Greeter greeter = new Greeter();
@Test
public void greeterSaysHello() {
// assertThat(greeter.sayHello(), containsString("Hello"));
assertThat(greeter.sayHello(), containsString("Wello"));
}
}
Greeter.classのsayHelloメソッドが返す文字列が"Wello"を含んでいるとテストOKとする。
Greeterは修正していないため、当然"Hello World!"を返すため、テストはNGとなるはず。
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running hello.GreeterTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.092 sec <<< FAILURE!
greeterSaysHello(hello.GreeterTest) Time elapsed: 0.015 sec <<< FAILURE!
java.lang.AssertionError:
Expected: a string containing "Wello"
but: was "Hello world!"
(中略)
Results :
Failed tests: greeterSaysHello(hello.GreeterTest): (..)
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.501 s
[INFO] Finished at: 2020-11-24T13:49:03+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project maven-test: There are test failures.
このように、テストの結果にFailureがあることで、ビルド自体もNGとなる。