S-JIS[2017-09-13/2022-11-11] 変更履歴

JUnit5

JUnit5について。


概要

JUnit5では、今までJUnit4で使われていた@TestアノテーションやassertEqualsメソッド等のパッケージが変わった。
テストや設定の記述方法も多少変更されている。
(従来のアノテーションやメソッドを使いつつ、テストの実行だけJUnit5のエンジンを使うということも出来る)

JUnit5はJava8以降が対象。
ただし、テスト対象クラス自体はJava8より前のJDKでコンパイルされたものでも可。


JUnit5は主に3つのサブプロジェクトに分かれた。

サブプロジェクト 初期バージョン 説明
JUnit Platform 1.0.0 IDEでテストを実行する為のランチャー。
JUnit Jupiter 5.0.0 JUnit5のテストケース記述・実行用。
JUnit Vintage 4.12.0 Junit3,4のテストケース実行用。

JUnit5でテストケースを記述する場合、JupiterのAPI(「org.junit.jupiter.api」パッケージ)を使用することになる。(パッケージ名に「jupiter」が入っている)

Vintageは旧来のJUnit3,4で書かれたテストをJUnit5のエンジンで実行する為のもの。
JupiterのAPIを使ってテストを書いた場合は不要。

あと、opentest4jというライブラリーも使われており、JUnit以外のテストフレームワークとも共通で使えそうな上位部分が定義されているらしい。

Gradleのbuild.gradleの記述例


JUnit4との主な相違点

  JUnit4 JUnit5
ライセンス CPL(Common Public License)だったが、EPLに変わった? EPL(Eclipse Public License)
インポート import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
テストクラスの定義 publicクラス publicである必要は無い。
テストの継承   抽象クラスのメソッドやインターフェースのデフォルトメソッドに@Testを付けてテストを書いておき、
(それを継承したクラスから)テストを実行することが出来る。
抽象クラス・インターフェースのテストメソッド
内部クラス   テストクラスの内部クラスにテストを記述することが出来る。
Nested
テストメソッドの定義 @Test public void 〜()
@Testアノテーションを付けたpublic voidで引数なしのメソッドが実行対象。
@Test void 〜()
@Testアノテーションを付けたvoidで引数なしのメソッドが実行対象。
(publicである必要は無い)
(引数にTestInfoを入れることも出来る)
テストクラスの
インスタンス生成
テストメソッドを実行する毎にテストクラスのインスタンスを作る。 デフォルトでは、テストメソッドを実行する毎にテストクラスのインスタンスを作る。
インスタンス生成を1回だけにすることも出来る。
テストインスタンスのライフサイクル
全テストの実行前後 @BeforeClass・@AfterClassを付けたstaticメソッドが、クラス内の全テストの実行前後に呼ばれる。 @BeforeAll・@AfterAllを付けたメソッドが、クラス内の全テストの実行前後に呼ばれる。
インスタンスメソッドにする場合は、テストクラスのインスタンス生成を1回だけにする必要がある。
テストメソッド実行前後 @Before・@Afterを付けたメソッドが、各テストメソッドの実行前後に呼ばれる。 @BeforeEach・@AfterEachを付けたメソッドが、各テストメソッドの実行前後に呼ばれる。
テスト名の指定   @DisplayNameアノテーションでテスト名を付けることが出来る。
テストを実行しない方法 テストメソッドに@Ignoreアノテーションを付ける。 テストメソッドに@Disabledアノテーションを付ける。
(条件に応じてスキップしたい場合はAssumptionsを使う。[2022-11-11]
テスト情報の取得   テストメソッドの引数にTestInfoを指定する事でテストクラス・テストメソッドの情報を取得できる。
等値のテスト assertEquals(expected, actual)あるいは
assertThat(actual, is(expected))を使用。
assertEquals(expected, actual)を使用。
テスト失敗時のメッセージは第1引数に指定する。
assertEquals(message, expected, actual)
テスト失敗時のメッセージは最後の引数に指定する。
assertEquals(expected, actual, message)
assertEquals(expected, actual, () -> message)
例外のテスト @Testアノテーションの引数expectedに発生すべき例外クラスを指定する。 assertThrows()を使用。
パラメーターテスト @Testの代わりに@Theoryを付ける。
@DataPointsを付けたフィールドでデータを指定する。
@Testの代わりに@ParameterizedTestを付ける。
@ValueSourceを付けてデータを指定する。

JUnitへ戻る / Javaへ戻る / 技術メモへ戻る
メールの送信先:ひしだま