Eclipse環境でGradleビルドするJavaアプリケーションの自動テスト(JUnit5)の書き方(テスト自動化のためのフレームワーク② JUnit)

ギークフィードエンジニアの君島です。

 

以前にGradleでJavaアプリの書き方と自動テストのフレームワークについて紹介しました。

Eclipse環境でGradleビルドするJavaアプリケーションの開発tips

テスト自動化のためのフレームワーク① Selenium

今回は2つの記事の続編という立ち位置の記事として、Javaの自動テストフレームワークJUnit5でテストを書く方法を紹介します。

 

以下の流れで読めば、Eclipseを使いながらGradleで作成したJavaアプリケーションを自動テストJUnit5で動作させることできるようになっています。

 

JUnit5とは

詳細は公式のユーザガイドを参照してください。

JUnit 5 User Guide

 

このうち、自動テストを書くにおいては2章が参考になるかと思います。

この記事では2.1. Annotationsと2.4. Assertionsの一部を実例と共に紹介します。

2. Writing Tests
2.1. Annotations
2.2. Test Classes and Methods
2.3. Display Names
2.4. Assertions
2.5. Assumptions
2.6. Disabling Tests
2.7. Conditional Test Execution
2.8. Tagging and Filtering
2.9. Test Execution Order
2.10. Test Instance Lifecycle
2.11. Nested Tests
2.12. Dependency Injection for Constructors and Methods
2.13. Test Interfaces and Default Methods
2.14. Repeated Tests
2.15. Parameterized Tests
2.16. Test Templates
2.17. Dynamic Tests
2.18. Timeouts
2.19. Parallel Execution
2.20. Built-in Extensions

 

環境

OS Windows10 (64bit)
IDE Eclipse 4.10.0
JDK JDK8
Gradle 5.5

 

JUnit5での自動テストの作り方

プロジェクト作成

Eclipse環境でGradleビルドするJavaアプリケーションの開発tips

をほぼそのまま引用します。違いは一点のみです。

 

実行時に、回答を全てデフォルトではなく、type of projectをapplication、かつtest frameworkをJUnit Jupiterにします。以下gradle initの出力例です。

 

このあとは、過去の記事に従ってeclipseで読み込めるようにすれば、以下のプロジェクトが出来上がっていることでしょう。

この時点でソースのパスとは別にテストコードのパスも、ソースと同一パッケージ名にてテストクラスも出来上がっています。

つまりは、もうEclipse環境でGradleビルドするJavaアプリケーションの自動テストの8割は完成です。

この後は実際の修正を想定して自動テストを実際に書いていくだけになります。

 

アプリケーションのソースコードの修正

もともと出来上がっていたApp.javaに以下のような修正を加えました。

・各アクセス修飾子のメソッドを追加した

・メンバ変数を追加した

・定義を用いた(やってみたが特に意味はなかった)

 

テストケースの追加

それでは修正したクラスのテストケースを追加しましょう。

アクセス修飾子protectedのテストもしたいので、パッケージ名を対象のクラスと同じにします。

また、Class under test(対象のクラスの指定)にパッケージ名を含む対象のクラスを入力し、Nextをクリックします。

 

そうすると、メソッド単位でテストメソッドの自動生成ができます。

ご覧の通り、当然private修飾子のメソッドは表示されません。privateメソッドはprotectedかpublicのテストから行うか、自動テストの対象としたければ修飾子を変更しましょう。(ここで修飾子を変更するというのは、設計が間違っているともいえるので、その際は見直しをしましょう。)

Finishを押すとテストメソッドが自動生成された状態のテストクラスが生成されます。

 

自動テストを書く

ここから先は実際に自動テストのプログラムを書いていきます。

User Guideの2.1. Annotationsについて、よく言われる点を簡単に記載します。以下の表の順序に呼び出されます。

Annotation Description
@BeforeAll テストケースの実行前に一度だけ呼ばれるメソッドであることを示します。staticなメソッドとなります。
@BeforeEach テストメソッドごとにその直前に呼ばれるメソッドであることを示します。
@Test テストメソッドであることを示します。
@AfterEach テストメソッドごとにその直後に呼ばれるメソッドであることを示します。
@AfterAll テストケースの実行後に一度だけ呼ばれるメソッドであることを示します。staticなメソッドとなります。

 

また、User Guideの2.4. Assertionについて、

今まではassertionは上から実行されて、途中で失敗した場合は以降のassertionは実行されませんでした。

それをJUnit5では、以下のような書き方をすると途中でassertに失敗しても、実行される書き方ができるようになりました。

 

以上を踏まえて書いたテストコードの例がこちらです。

 

テスト実行・ビルド実行

テストの実行はEclipseのRun As > JUnit Testで実行できます。

また、ビルド前に自動テストの実行もしてくれます。つまり、いつも通りbuild gradleでOKです。

また、build\reports\tests\test\index.htmlにテスト結果のレポートも出力してくれます。Packageから辿ると、テストメソッドごとの詳細も出力されていることが分かります。

 

まとめ

以上が、Eclipse環境でGradleビルドするJavaアプリケーションの自動テスト(JUnit5)の書き方、並びにテスト自動化のためのフレームワーク② JUnitでした。

JUnit5からの新機能もまだまだありますが、長くなってしまうので別の機会に紹介していきたいと思います。

テストコードを書くこと自体は作業になりますが、それまでに特別な操作はあまりないことが分かりますので、自動テストを書いていく習慣をつけていきたいですね。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ