JUnit 5 の初心者ガイド

JUnit 5は、開発者がコードの単体テストを行うために使用するソフトウェアテストフレームワークです。これはJavaベースのフレームワークで、Javaプラットフォーム上でテストを作成および実行することができ、テスト結果を表示する統合レポーターも含まれています。

JUnitは、自動化テストのために主に2つの目的で使用できます:

  1. ソフトウェアが期待通りに機能していることを確認すること
  2. コード内のエラーを見つけて報告し、できるだけ早く修正すること

このブログでは、JUnit 5のセットアップ、構成、および基本的なメソッドについて学んでいきます。

JUnit 5とは?

JUnit 5は、JUnitテストフレームワークの最新バージョンです。これはJava 8以降の新しいバージョンをサポートし、さまざまなテストスタイルに対応し、JVM上での開発者側のテストのための現代的な基盤を提供します。

JUnitを使用する主な利点は、そのモジュール性です。これは、開発者がソフトウェアのさまざまなコンポーネントを簡単にテストできる複数のモジュールを含んでいます。また、アプリケーション全体ではなく、アプリケーションの個々のクラスをテストするためにも使用できます。

JUnit 5の特徴

以下は、JUnit 5の人気のある重要な特徴のいくつかであり、他の単体テストフレームワークと区別される点です。

Feature Description Annotations/Method
テストスイート

テストスイートは基本的に、スモークテスト、サニティテスト、または特定の機能に関連するテストのグループです。

JUnit 5は、一緒に実行できるテストスイートの作成を許可します。

テストスイートを使用するには、JUnit Platform Suiteの依存関係を追加し、次のアノテーションを使用する必要があります。
@SelectPackages,
@SelectClasses, @Suite
アサーション アサーションは、ソフトウェアの期待される動作を検証するために使用されます。JUnit 5は、アサーションを簡単に実行するための組み込みアサーションメソッドを提供しています。 クラスimport org.junit.jupiter.api.Assertions;には、複数のアサーションメソッドが用意されています。
いくつかのメソッドは以下の通りです:
assertTrue(), assertFalse(),
assertEquals(), assertAll(), assertNotEquals()
テスト実行順序 テストの実行順序をカスタマイズします。これにより、開発者はテスト実行を制御し、必要に応じて特定の順序でテストを実行できます。 @TestMethodOrder, @Order,
@TestClassOrder
例外テスト 必要な例外がテストに投げられていることを検証する例外テストを実行します。 import org.junit.jupiter.api.Assertions;
クラスから以下のメソッドが使用されます:
assertThrows()
テスト依存関係 テスト依存関係は、テストメソッドがお互いに依存することで、順次テストを可能にします。つまり、前のテストメソッドに依存する次のテストメソッドは、前のテストが合格しない限り実行されません。これは統合テストを書く際に役立つ機能です。 @TestInstance
テストの無効化 テストまたはテストクラスを無効にします。 @Disabled
タイムアウト 指定された時間を超過するとテストを失敗させます。 @Timeout
レポート テスト結果を分析し詳細な情報を表示するための組み込みレポーターを提供します。テスト実行結果の.htmlファイルを生成します。 N/A

JUnit 4 vs. JUnit 5

最新バージョンのJUnitであるJUnit 5がリリースされ、フレームワークには複数の変更と新機能が追加されました。2つのバージョン間の違いは以下の表にリストされています:

criteria JUNIT4 JUNIT5
アーキテクチャ すべてが1つのJARファイルにパッケージ化されていました。 3つのサブプロジェクトに分割されています:
– JUnitプラットフォーム
– JUnit Jupiter
– JUnit Vintage
JDKバージョン要件 Java 5以上が必要です Java 8以上が必要です
サードパーティーの統合 プラグインやIDEのサポートにサードパーティーの統合はありません サードパーティーの統合用の専用サブプロジェクト(JUnitプラットフォーム)が提供されます
ネストされたテストのサポート ネストされたテストを書くためのアノテーションが提供されていません ネストされたテストを書くための@Nestedアノテーションが提供されます
カスタム拡張機能の登録サポート カスタム拡張機能のサポートがありません カスタム拡張機能を登録するための@ExtendWithアノテーションが提供されます
よく使われるアノテーションの変更点 @BeforeClass
@AfterClass
@Before
@After
@Ignore
@BeforeAll
@AfterAll
@BeforeEach
@AfterEach
@Disabled
タグ付けとフィルタリング用のアノテーションの変更 @Categoryアノテーションが使用されます @Tagアノテーションが使用されます
テストスイート @RunWithおよび@Suiteアノテーションが使用されました @Suite@SelectPackages、および@SelectClassesアノテーションは使用されます

JUnit 5の使い方

このセクションでは、IntelliJ IDEを使用してJUnit 5のテストケースを書く方法を学びます。JUnit 5がすでにバンドルされているため、使用するために追加のインストールを行う必要はありません。

新しいMavenプロジェクトを作成し、JUnit 5の依存関係を追加し、すぐにテストを書き始める必要があります。

MavenプロジェクトにJUnitの依存関係を追加する

次のJUnit 5の依存関係をpom.xmlファイルに追加する必要があります:

  • JUnit Jupiter Engine
  • JUnit Jupiter API
  • JUnit Platform Suite(アグリゲーター)
  • JUnit Jupiter Params
XML

 

こちらが完全なpom.xmlファイルです

XML

 

依存関係を追加した後、テストを書く準備が整いました。しかし、JUnit 5を使用してテストを書く前に、テストスイートを効率的にセットアップし、望ましいようにテストを実行するのに役立つ基本的なアノテーションを理解しましょう。

JUnit 5で使用される基本的なアノテーション

以下は、JUnit 5を使用してテストを書く際に開発者によって最も一般的に使用される基本的なアノテーションです。

@BeforeAll アノテーション

@BeforeAllアノテーションは、注釈付きのメソッドが現在のクラス内のどの@Test, @RepeatedTest, @ParameterizedTest, @TestFactoryメソッドよりも前に実行されるべきであることを示します。テストクラス内の静的メソッドである必要があります。

@BeforeAllは、JUnit 4.xで使用されていた@BeforeClassアノテーションの代替として機能します。

構文:

Java

 

@BeforeEachアノテーション

@BeforeEachアノテーションは、注釈付きのメソッドが現在のクラス内の@Test, @RepeatedTest, @ParameterizedTest, @TestFactoryメソッドの各呼び出しの前に実行されるべきであることを示します。

これはテストライフサイクルメソッドの一部であり、JUnit 4で使用されていた@Beforeアノテーションの代わりとなります。

構文:

Java

 

@AfterAllアノテーション

@AfterAllアノテーションは、現在のクラス内のすべてのテストが実行された後に、注釈付きのメソッドが呼び出されるべきであることを示します。静的メソッドであり、テストクラス内の後始末メソッドとして使用されます。

@AfterAllアノテーションは、JUnit 4の@AfterClassアノテーションの代替となります。

構文:

Java

 

@AfterEachアノテーション

@AfterEachアノテーションは、注釈付きのメソッドが現在のクラス内の各@Test, @RepeatedTest, @ParameterizedTest, @TestFactoryメソッドの後に実行されるべきであることを示します。

これは、JUnit 4で使用されていた@After注釈のJUnit 5用の置換として機能します。

構文:

Java

 

@Test注釈

@Test注釈は、注釈付きのメソッドがテストメソッドであることを示します。テストメソッドはprivateまたはstaticメソッドではなく、値を返してはいけません。

構文:

Java

 

@DisplayName注釈

@DisplayName注釈は、注釈付きのテストクラスまたはメソッドのためのカスタム名を指定するために使用されます。これらのカスタム名には、スペース、特殊文字、絵文字さえ含めることができ、通常はIDEやビルドツールによって生成されるテストレポートで利用されます。

構文:

Java

 

@Disabled注釈

JUnit 5の@Disabled注釈は、テストメソッドまたはテストクラスをテストスイートから除外するために使用されます。

テストクラスに適用されると、テストクラス内のすべてのメソッドが自動的に無効と見なされます。この注釈には、テストを無効にする理由を指定するオプションのパラメータがあります。

構文:

Java

 

JUnit 5を使用した自動化テストケースの作成方法

コードに入り、JUnit 5で実際の作業を始める時が来ました。新しいJavaクラス、BasicTestを作成します。

Java

 


デモンストレーションの一環として、議論したすべての基本的な注釈がカバーされます。

BasicTestクラスにメソッドを追加して、JUnit 5で使用可能な@BeforeAll@BeforeEach@AfterAll@AfterEach@Test@DisplayName@Disabledアノテーションの使用方法をデモンストレーションしましょう。

Java

 

コードの概要

テストクラス上の@DisplayNameアノテーションは、テストが実行されたときに結果でテスト名を「Demo test class」として表示します。

beforeAllTest()メソッドは、どのテストが実行される前に実行され、“Before All method Called!!”というテキストを出力します。次に、beforeEachTest()メソッドは、各テストの前に実行され、“Before Each Method called!!”というテキストを出力します。

このクラスには、testMethodOne()testMethodTwo()disabledTest()の3つのテストメソッドがあります。これらの3つのテストメソッドには、@Testアノテーションが付いており、これらがテストメソッドであることを示しています。

disabledTest()メソッドは、@Disabledアノテーションが付いているため、実行されません。

すべてのテスト実行が完了すると、afterEachTestMethod()が実行されます。これは、@AfterEachアノテーションが付いているためです。

最後に、すべてのテストが実行された後、afterAllMethod()が実行されます。これは、@AfterAllアノテーションが付いているためです。

テストの実行

テストは、テストクラスを右クリックして、「<Test class Name>」(この場合は“BasicTest”)を選択することで実行できます。

別の方法としては、以下のスクリーンショットに示すように、テストクラス宣言の横にある緑色の再生アイコンをクリックする方法があります:



以下のIntelliJ IDEのスクリーンショットでは、テストが正常に実行されたことがわかります。

上記のスクリーンショットで、テストクラスの表示名が表示され、無効になっているテストも表示されており、無効になっている理由がコンソールに表示されていることがわかります。

それ以外のすべてのテストメソッド、beforetestおよびaftertestを含むメソッドが正常に実行され、それぞれの結果がコンソールに表示されました。

サマリー

開発者がコードのユニットテストを実行するために使用する強力なテストフレームワークであるJUnit 5。テスト自動化エンジニアがテスト自動化スクリプトを記述して実行するためにも使用されます。開発者やテスターがテストスクリプトを記述し、コードのユニットテストを実行するための豊富な機能を提供しています。

自動化テストを記述して実行するだけでなく、アサーションや検証を実行するための複数のメソッドも提供しており、テストスクリプトの作成と実行に役立ちます。テストスクリプトの実行結果を利害関係者にデモンストレーションするために使用できるテストレポートも提供されています。

ハッピーなテスト!

Source:
https://dzone.com/articles/beginners-guide-to-junit-5