0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Mavenプロジェクトで単体テストを実行する

Last updated at Posted at 2020-11-24

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
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だった場合の動きを見てみる。
テスト用モジュールを以下のように修正。

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"));
    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となる。

参考

参考サイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?