概要
JavaによるWebアプリケーション開発を例に、わかりやすく単体テストの方法が学べる本。
テストコードの作り方、自動実行ツールJUnitの使い方をはじめ、DBアクセスや外部システム連携の単体テストや、実装の前段階からテストを考慮することによってテストを効率化する方法、テストを自動化する環境の構築などを解説する。 開発者が開発現場で活用できる内容となっている。
本書の使い方
部構成でそれぞれ目的に沿って読み分けることができる。
Javaプログラミングの基礎知識を前提としている。
第1部:第1章~第2章 単体テストの目的と考え方、導入のメリットを学べる すべての対象者
第2部:第3章~第7章 効果的なWebアプリケーションの単体テスト手法を学べる プログラマ
第3部:第8章~第11章 実装前段階からのテスト効率化の方法を学べる プログラマ、リーダー、マネージャ
何を学べるか
第1部 単体テストは侮れない
アプリケーション開発ではテストに十分な時間がかけられない。だが、単体テストとがおろそかではどれだけ、それ以降のテストをがんばっても品質は高まらない。その重要性を説明する。
第1章 超多忙な現場になぜ単体テストを勧めるのか
多忙を極める現場でもテストを実施すべきであるという観点からテストの目的、考え方を解説する。テストの基礎知識、単体テストを適切なタイミングで行うことのメリットを説明した上で、単体テストツール『Junit』を用いてテストを行うメリットを解説する。「テストクラス」を作成することにより、繰り返し実施可能、結果がわかりやすい、どこをテストしたかわかる、デグレードの早期発見、仕様変更にも対応しやすい、などのメリットが得られることを挙げる。
第2章 Webアプリケーションの単体テストをよく知ろう
時間を掛けられない開発側の事情をくみながら、Webアプリケーションの単体テストを効果的に行う方法を説明する。従来のテストでなぜ時間がかかっていたのか、一般的なMVCモデルでの開発を例に挙げ、その問題点を振り返った上で、テストのプログラムである「テストクラス」を作成し、単体テストを楽にする方法を考える。また、単体テストの主な手法やテスト終了基準の考え方を解説する。
第2部 行う価値の高い単体テスト
テストクラスを作成することで効果が上がりそうなケースを重点的に説明する。
第3章 EclipseとJUnitで作るテストクラス
テストクラスを作成し、Eclipse+Junit4の環境で単体テストを実施する基本的な方法を説明する。テストクラスの基本形、テストメソッドの定義方法、テストの結果判定を行うメソッド、テストクラスの作成と実行、などを解説する。
第4章 DBアクセスの単体テスト
DBアクセスの単体テストにかかる作業を自動化し軽減するツール「DbUnit」を使用する方法を解説する。「DbUnit」はJUnitにDB操作を簡単に行う機能を提供するもので、SQLのSELECT/INSERT/UPDATE/DELETEの各文を発行するメソッドにおいて使用する。
第5章 DBアクセスのテストケースを減らす方法
Webアプリケーションの開発では、SQL文のテストを十分に行わなかったために不具合が残ることが少なくないが、テストケースを考えることは容易ではない。 本章では、テーブル作成の段階から、SQL文のテストのしやすさを意識することでテストにかかる工数を減らす方法を解説する。
第6章 ビジネスロジックと外部リソースのアクセスのテスト
Webアプリケーションの開発では、ビジネスロジックとの連携もテストする必要がある。本章ではJunitでビジネスロジック用のテストクラスの作成方法を解説する。Mockオブジェクトを極力使わずに効率的に単体テストを行う方法を紹介する。また、外部リソースにアクセスする処理のテスト方法として、メソッドを適切に切り分けることによって、外部リソースのファイルに極力依存しなくてもテストできる方法などを紹介する。
第7章 外部システム連携と画面側のテスト
外部システムは、単体テストにおいて、気軽にアクセスできないリソースの一つである。本章ではMockフレームワークのツールである「Jmockit」「EasyMock」の使い方を紹介するなかで、外部システムに正しく接続処理をしているかをテストする方法を解説する。 一方、MVCモデルのテストにおいては、ViewとControllerのテストは手動と目視確認に頼ることが多く、テスト完了の判断が容易ではない。カバレッジツール「EMMA」を用いて、Webブラウザを使ったテストにおいてもカバレッジを計測する方法を紹介する。
第3部 継続的にテストをするために
実装時やそれ以前の工程段階からテストのことを考慮して作業することにより、テストにかかる時間を減らすことができる。その考え方や、テクニック、ツールを紹介する。
第8章 実装前にテストを意識する
実装以前の、ソフトウェアアーキテクチャを考慮する段階からテストを意識し、プロジェクトメンバー内で認識を合わせることで、クラスの粒度を合わせ、テストしやすいソースコードを作ることができる。本章では、良いテストの条件から、テストしやすいソフトウェアアーキテクチャとは何かを考察する。
第9章 テストを意識した開発のポイント
実装時においてテストを意識することにより、テストケースを減らしたり、テストしやすくする方法を解説する。テストを意識した引数の配慮、システム日付を扱うメソッドのテスト法、発見しづらいバグを作らないための対策法などを紹介する。 また静的解析ツールを活用してテストやレビューにかかる時間を圧縮する方法を解説する。
第10章 さらにテストを省力化するポイント
テスト自体を省力化する方法を紹介する。 オープンソースソフトウェアとして配布されている既成のプログラムを利用して、テスト対象となるプログラムを減らすことができる。使用されることの多い無償コンポーネントをいくつか紹介する。また、結合テスト以降でバグが発見された際に、テストクラスを使用することで、修正によって新たにバグを作りこまないための方法を紹介する。最後に個々の開発者の開発環境に依存しない、テストクラスの作成方法・方針を紹介する。
第11章 ビルド&テストを自動化する環境の構築
開発者が単体テストを実行し、パスしているかの確認は、ビルドサーバーを立てることによって共有が容易になる。本章ではテストを意識した開発環境と、オープンソースソフトウェアを活用したビルドサーバーの構築方法について解説する。 CI(継続的インテグレーション)を実現するためのビルドツール、CIツールの紹介、それらのツールを使用してのビルドサーバーの構築方法を説明する。