10.1. 単体テスト概要

10.1.1. はじめに

本章では、Macchinetta Server Framework (1.x)を使用したシステムにおける、JUnitを用いた単体テストについて提示する。

ここでの単体テストのスコープはレイヤまたはレイヤ間結合とし、テストに関するアクティビティのうち、テスト実装と テスト実施に関して解説する。 なお、解説するテスト実装は参考例でありシステムの品質を保証するためのテスト方針については、別途検討いただきたい。

10.1.2. 単体テストガイドラインが示すこと

本章では、以下のOSSライブラリを使用したレイヤまたはレイヤ間のテスト実装方法について説明する。

10.1.2.1. 単体テストで利用するOSSライブラリ構成

10.1.2.1.1. テスティングフレームワーク

Javaのテスティングフレームワークとして、JUnitを使用する。

10.1.2.1.2. アサーション

アサーションに使用するライブラリとしてHamcrestを使用する。 JUnit4が標準でサポートしているアサーションライブラリである。

10.1.2.1.3. モック化

テスト対象のメソッドが依存するクラスをモック化するためのライブラリとしてMockitoを使用する。

10.1.2.1.4. DIコンテナ

テスト用のDIコンテナとして Spring TestのDI機能を使用する。

10.1.2.1.5. MVCフレームワーク

テスト用のMVCフレームワークとして Spring MVC Test Frameworkを使用する。

10.1.2.1.6. トランザクション管理

テスト用のトランザクション管理として Spring Testのトランザクション管理機能を使用する。

10.1.2.1.7. データアクセス

テスト用のデータアクセスとして、Spring TestまたはDBUnitとSpring Test DBUnitを使用することを想定している。

  • Spring Test
    • Spring Testは@SqlアノテーションやJdbcTemplateなどを使用してSQLを発行する機能を提供している。
  • DBUnitSpring Test DBUnit
    • Spring Test DBUnitは、Spring Framework上でDBUnitを利用する際の支援ライブラリのため、DBUnitと組み合わせて使用する。 DBUnitの提供するデータベースのセットアップ、状態の検証などの機能をアノテーションベースで実装する機能を提供している。

10.1.2.2. 単体テストで利用するOSSライブラリのバージョン

単体テストで利用するOSSライブラリの一覧を以下に示す。

なお、以下のOSSライブラリはあくまで一例であり、実際は業務要件に合わせたライブラリを検討いただきたい。 また、本章内のアプリケーション自体を動作させるために利用するOSSライブラリ一覧については、 利用するOSSのバージョンを参照されたい。

以下のOSSライブラリの中で、特にSpring Test(MockMvc)、Mockitoの使い方については、単体テストで利用するOSSライブラリの使い方で詳細を説明する。

Type GroupId ArtifactId Version Spring Boot
JUnit junit junit 4.12 *
Hamcrest org.hamcrest hamcrest 2.1 *
Mockito org.mockito mockito-core 3.1.0 *
Spring Test org.springframework spring-test 5.2.3.RELEASE *
DBUnit org.dbunit dbunit 2.5.4
Spring Test DBUnit com.github.springtestdbunit spring-test-dbunit 1.3.0
Apache POI org.apache.poi poi-ooxml 3.17

Note

Hamcrest 2.1より、hamcrest-corehamcrest-libraryにあたるモジュールがhamcrestに統合されたため、実施したいアサーションによりhamcrest-libraryのような依存関係を追加する必要がなくなった。 なお、Maven依存関係としてはhamcrest-corehamcrest-libraryを引き続き利用することができるが、実態としてはすべてhamcrestを参照する形となる。

Warning

利用するOSSのバージョンのとおり、本フレームワークで利用するApache POIは4.xであるが、単体テストでのみ3.17を利用する。 これは、本フレームワークで利用しているDBUnitがApache POI 3.17に依存しており、4.xではDBUnitが利用するいくつかのメソッドが廃止されているため、Excel形式のデータ定義ファイルを読み込む際に実行時エラーとなることが確認されているためである。


10.1.2.3. 単体テストの実装

単体テストはアプリケーションのレイヤ化に沿った以下のレイヤ単位で実装している。レイヤまたはレイヤ間のテスト方法を レイヤごとのテスト実装で説明する。 レイヤ単位に当てはめられない共通機能や、機能特有のテスト方法は、機能ごとのテスト実装で説明する。

../_images/UnitTestOverviewApplicationLayer.png

10.1.3. 対象読者

本章は、このドキュメントの対象読者に加えて以下の知識・経験があることを前提としている。

  • JUnitを使用した単体テストを行ったことがある

10.1.4. 単体テストの動作検証環境

本章は、以下の環境で動作検証をしている。 他の環境で実施する際は、本章をベースに適宜読み替えること。

種別 名前
OS Windows 7
JVM Java 1.8
IDE Spring Tool Suite 3.9.1.RELEASE (以降「STS」と呼ぶ)
Build Tool Apache Maven 3.3.9 (以降「Maven」と呼ぶ)
RDBMS PostgreSQL 9.6.5

Warning

本ガイドラインではSTS 4.xではなく、3.xの利用を推奨している。詳細は STS 4.x について を参照されたい。