JUnit 実践入門
ジェイユニット ジッセン ニュウモン
体系的に学ぶユニットテストの技法
- 著者:
- 渡辺修司(ワタナベ, シュウジ)
- 出版社:
- 技術評論社
- 出版日:
- 2012年12月
- ISBN:
- 9784774153773
- シリーズ:
- WEB+DB press plus シリーズ
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
技書の森解説
Java でユニットテストを書き始めると、JUnit の使い方そのものよりも「何をどうテストすれば良いのか」で手が止まる人は少なくありません。『JUnit 実践入門』 (渡辺修司 著、技術評論社、2012 年 11 月刊、WEB+DB PRESS plus シリーズ) は、副題「体系的に学ぶユニットテストの技法」のとおり、JUnit の基本的な使い方から拡張機能、テストパターンまでを網羅的に扱い、さらにデータベースや Android のテスト、ビルド支援ツール / カバレッジ測定ツール / 継続的インテグレーション / テスト駆動開発といった周辺技術をユニットテストの視点から説明する一冊です。版元の紹介では JUnit を Java テスティングフレームワークのデファクトスタンダードと位置づけ、対象読者として Java プログラマ全般と、ユニットテストの効果的な活用方法に興味のある方を挙げています。巻頭には和田卓人氏による「推薦のことば」が収められています。
全 5 部 20 章の構成、JUnit チュートリアルから演習問題まで
構成は全 5 部 20 章で、付録 A から F と巻頭付録の JUnit チートシートが付きます。Part 1「JUnit 入門」は第 1 章の JUnit チュートリアルでプロジェクトを作成し、テスト対象クラスとテストクラスを書いて実行するところから始め、第 2 章でソフトウェアテストの目的や限界とテスト技法を、第 3 章で xUnit フレームワークとしての JUnit の記法を押さえます。Part 2「JUnit の機能と拡張」は第 4 章から第 10 章にかけて、アサーション、テストランナー、テストのコンテキスト、テストフィクスチャ、パラメータ化テスト、ルール、カテゴリ化テストを 1 章ずつ掘り下げる部分で、Hamcrest が提供する Matcher やスローテスト問題への対策もここに含まれます。Part 3「ユニットテストの活用と実践」は第 11 章のテストダブル、第 12 章のデータベースのユニットテスト、第 13 章の Android のテスト、第 14 章のコードカバレッジと、実務で壁になりやすい題材が並びます。Part 4「開発プロセスの改善」は継続的テスト、テスト駆動開発、振舞駆動開発の 3 章、Part 5 は第 18 章から第 20 章の演習問題です。付録では開発環境と Eclipse の設定、H2 Database、Android 開発環境、Jenkins のセットアップに加え、付録 F に本書利用環境のバージョンがまとめられています。
JUnit 4 を体系的に学ぶ意味と、テストダブルの位置づけ
ユニットテストの難しさは、フレームワークの API を覚えることではなく、テスト対象を外部依存から切り離し、失敗したときに原因がすぐ分かる単位で検証を書くことにあります。フィクスチャの準備、ルールによるテストクラスの拡張、パラメータ化テスト、カテゴリ化といった仕組みを場当たり的に覚えると、動くテストは書けても壊れにくいテストにはなりません。Part 2 がこれらを 1 章ずつ切り分けている構成は、機能の一覧としてではなく、テストコードの構造をどう組み立てるかという観点で JUnit 4 を読み直す助けになります。第 11 章のテストダブルはその延長線上にあり、テスタビリティを高めるリファクタリングとメソッドの抽出から、モック とスタブによる置き換え、Mockito によるモックオブジェクトへと進みます。第 12 章では Web 三層構造アーキテクチャを前提にパーシステンス層をスタブで置き換える考え方と、DbUnit によるデータベースのテストを扱い、外部システムに依存するコードをどうテスト可能にするかという実務でつまずきやすい壁に、設計と道具の両面から向き合います。
ユニットテストを開発プロセスに組み込む Part 4 の読みどころ
テストを書くことと、テストが開発の役に立ち続けることは別問題です。Part 4 は第 15 章の継続的テストで、早期からテストする、自動的にテストする、繰り返しテストするという考え方を示したうえで、Maven によるビルドプロセスの自動化、バージョン管理システムによる継続的テストの運用、Jenkins による継続的インテグレーションへと進みます。第 16 章の テスト駆動開発 は、設計する、テストコードを書く、プロダクションコードを書く、リファクタリングを行う、次のサイクルを始めるというサイクルとして説明され、第 17 章の振舞駆動開発では受け入れテストの自動化とテスト駆動開発との違いを扱います。第 14 章の コードカバレッジ で C0 (命令網羅) / C1 (分岐網羅) / C2 (条件網羅) の基準とカバレッジツールの利用を押さえておくと、テストの網羅率を測る指標と、テストを回し続ける仕組みの両方が手に入ります。
Java プログラマ全般に向く前提と、2012 年刊ならではの注意点
Java の基本文法を理解していることが前提で、版元が対象に挙げるのは Java プログラマ全般と、ユニットテストの効果的な活用方法に興味のある方です。テストを一度も書いたことがない人でも第 1 章のチュートリアルから入れる一方、すでに JUnit を使っている人には Part 2 以降の体系化と、Part 5 の演習問題 (状態を持たないメソッドのテスト、例外を送出するメソッドのテスト、副作用を持つメソッドのテスト、境界値のテスト、システム時間に依存するテスト、外部システムに依存するテスト、サーブレットのテストなど) が腕試しになります。注意点は刊行時期です。本書は 2012 年 11 月刊で、扱う JUnit は 4 系 (目次には JUnit 3 スタイルのテストを扱うコラムもあります) であり、Android 開発環境や Maven / Jenkins / Eclipse の設定手順は付録 F に記された当時のバージョンが前提です。2026 年時点の JUnit や周辺ツールとはバージョンが異なるため、手順をそのまま再現するには差分の読み替えが必要で、Java 以外の言語のユニットテストを学びたい人にも本書は直接の答えにはなりません。
著者の渡辺修司氏は、版元プロフィール (刊行時) によれば札幌在住のプログラマで、地元ではコミュニティ活動を通じて Java やテスト駆動開発の啓蒙活動を行い、業務では開発プロセスの改善や開発環境整備を行うことが多いとされています。本書もテストの書き方で終わらず、ビルド / カバレッジ / 継続的インテグレーションまでを 1 冊でつなぐ点に価値があります。Java の業務コードにこれからテストを足していく人、既存のコードにテストダブルを使ってテストを入れたい人、チームでテストの書き方を揃えたい人には、投じた時間の回収が早い一冊です。テスト関連の本を横断して比べたい場合は テスト本ガイド の観点も参考になります。JUnit の API を眺めるだけでは身につかないユニットテストの技法を、演習まで含めて体系的に習得したい人にとって、堅実な出発点になります。
言及した記事 (28 件)
私からあなたへ 一人前のJavaエンジニアになるためのロードマップを送ろう
♡ 1784Java, 初心者, ロードマップ, 学習方法, 新人プログラマ応援JUnit実践入門 体系的に学ぶユニットテスト
♡ 234テスト, JUnitJUnit・JMockitチートシート
♡ 195Java, テスト, JUnit, jMockitJava から始めた新人はとっとと読めばいいのにと思っている5冊
♡ 171Java, 新人プログラマ応援Javaのユニットテスト・ライブラリ・ツールまとめ
♡ 147Java, TDD, テスト担当したPJの単体テストが地獄絵図だったので独自に作成したガイド(?)を公開する
♡ 133Java, JUnit, 単体テスト, junit5続・AndroidでJUnit4を使う方法(Android SDKで正式サポートされました!)
♡ 107Android, Espresso, JUnit仕様書なし、テストなし、運用手順書なしのレガシーシステムを運用するのが辛いので改善する
♡ 69Java, JUnit, レガシーコード改善ガイド, レガシーコード, レガシーシステムJMockit はじめの一歩
♡ 63Java, JUnit, jMockitSierに新卒入社して4か月の研修期間中に読んだ・読んでいる本のまとめ
♡ 50技術書, 新人プログラマ応援
この本に興味がある方におすすめ
関連する本
関連記事
テスト本ガイド - テスト設計を学べる技術書の選び方
テストの書き方からテスト戦略まで学べる技術書の選び方を紹介。テストピラミッド、TDD の正しい読み方、テストの ROI の考え方を解説します。
「動くコード」と「良いコード」の間にある本
コードが動くようになった後、次に何を学べばよいのか。「動くコード」を「良いコード」に変えるために必要な知識と、それを効率的に学べる本の選び方を解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。