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.13.2

*

Hamcrest

org.hamcrest

hamcrest

2.2

*

Mockito

org.mockito

mockito-core

5.7.0

*

Spring Test

org.springframework

spring-test

6.1.3

*

DBUnit

org.dbunit

dbunit

2.7.3

Spring Test DBUnit

com.github.springtestdbunit

spring-test-dbunit

1.3.0

Note

Hamcrest 2.1より、hamcrest-corehamcrest-libraryにあたるモジュールがhamcrestに統合されたため、実施したいアサーションによりhamcrest-libraryのような依存関係を追加する必要がなくなった。

なお、Maven依存関係としてはhamcrest-corehamcrest-libraryを引き続き利用することができるが、実態としてはすべてhamcrestを参照する形となる。


10.1.2.3. 単体テストの実装

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

10.1.3. 対象読者

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

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


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

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

種別

名前

OS

Windows 10

JVM

Java 17

IDE

Spring Tool Suite 4.17.1.RELEASE (以降「STS」と呼ぶ。設定方法はSTS4の設定手順を参照されたい。)

Build Tool

Apache Maven 3.8.6 (以降「Maven」と呼ぶ)

RDBMS

PostgreSQL 15.4