MENU

JUnit5試したみた #1

エンジニアブログ

2017-12-26

第一印象は下北のバンドマン、内立良介です。

JUnit5が9/10にリリースされました。リリースからちょっと時間が経ってしましましたが、JUnit5について書きたいと思います。

What’ new JUnit5?

大きな違いと言えば、3つの異なるサブプロジェクトから構成されていることです。以前のバージョンまでは、1プロジェクトで構成されていました。
つまり、こういうことです。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage( JUnit5 User Guide より)

各プロジェクトの役割について簡単に説明します。

JUnit Platform

JVM上でテストフレームワークを動かすための基盤を提供します。

JUnit Jupiter

プラットフォーム上でJupiterベースのテストを動かすためのテストエンジンを提供します。

JUnit Vintage

プラットフォーム上でJUnit3やJUnit4ベースのテストを動かすためのテストエンジンを提供します。

JUnit5の導入

pom.xmlにこれらを追加してください。なお、JUnit5を動かすためには、Java8以上である必要があります。

それぞれの説明は Dependency Metadata に書いてあります。

一般的なテスト

サンプルコードです。

アノテーションの説明

テストを書く上で、よく使うアノテーションについて説明します。

@DisplayName

テストクラスやメソッドにつけることができるアノテーションです。
テストランナーやテストレポートが引数で指定した値を表示してくれます。文字列、空白、絵文字などを使うことができます。

@BeforeAll

JUnit4でいうところの@BeforeClassです。
全ての@Test, @RepeatedTest, @ParameterizedTest, and @TestFactory テスト実行前に1度だけ実行されます。

@BeforeEach

JUnit4でいうところの@Beforeです。
@Test, @RepeatedTest, @ParameterizedTest, and @TestFactory 各テスト実行前に実行されます。

@Disabled

JUnit4でいうところの@Ignoreです。
これをつけたテストクラス及びメソッドは実行されません。

実行結果

IntelliJ IDEAで実行しています。

@DisplayNameの表示

@DisplayNameで指定した値が表示されていることがわかります。今まではコメントとしてどういったテストか書いていたのでありがたいです。

結果出力

@BeforeAllがクラス内で1度だけ、@BeforeEachが各テスト前に実行されていることがわかります。

基本的なアサーションの紹介

サンプルコードです。
基本的にはJavaDocを読めば理解できると思います。

Assertions#assertAll

第1引数で指定している値は、テスト失敗時にメッセージに含みたい値になります。
DependentAssertions#nameAssertionsの失敗例です。

Assertions#fail

AssertionFailedErrorを投げて必ずテストを失敗させる。値を返す前に例外を投げる。AssertJのassertThatThrowByを使ってたら使い道なさそうです…

Assumption

Assumption#assumeTrueとかの結果がTrueだったら、それ以降に書いた検証を実行します。厳密には、TestAbortedExceptionを投げてテストを中断させています。
AssumptionAssertions#invalidTestでAssumption#assumeFalseの第2引数に渡した「() -> “This is invalid.”」は、テストが中断したときにメッセージに含みたい値になります。

実行結果

AssumptionAssertionsクラスで中断されたテストは結果に出力されていないことがわかると思います。中断されたことは、ログに出力されます。

今回は、JUnit5の導入的なところ触れてみました。次回は実用的なテストを書こうと思います。

JUnit5試したみた #2

2018-01-05

BLOG/エンジニアブログ

wajaの開発フロー

2017-12-29

BLOG/エンジニアブログ

カード番号をカメラでスキャンする

2017-12-19

BLOG/エンジニアブログ