JUnit実践入門 ── 体系的に学ぶユニットテストの技法
この本の概要
本書の公式タグは『#junitbook』です。
本書では,JavaテスティングフレームワークのデファクトスタンダードであるJUnitの基本的な使い方から,拡張機能,テストパターンまでを網羅的に解説します。また,データベースやAndroidのテストを取り上げるほか,ユニットテストを開発に効果的に取り入れるためのビルド支援ツール・カバレッジ測定ツール・継続的インテグレーション・テスト駆動開発などの周辺技術について,ユニットテストからの視点で説明します。JUnitをこれから学びたい方,もっと効率的にユニットテストしたい方,必読の書です。
こんな方におすすめ
- Javaプログラマ全般
- ユニットテストの効果的な活用方法に興味のある方
目次
- 推薦のことば 和田卓人
- はじめに
- 本書について
【Part 1 JUnit入門】
第1章 JUnitチュートリアル
ユニットテストの作成から実行まで
1.1 なぜ,ユニットテストを行うのか?
1.2 JUnitとは?
バージョン
- [コラム]企業文化と「ユニットテスト」の定義
ライセンス
1.3 JUnitテストを始めよう
チュートリアルの概要
プロジェクトを作成する
- 新規Javaプロジェクトの作成
- ライブラリの追加
- [コラム]junit-4.x.jarとjunit-dep-4.x.jar
テスト対象クラスを作成する
テストクラスを作成する
- testソースフォルダの作成
- テストクラスの作成
- Quick JUnitの利用
テストを実行する
1.4 テストコードの記述
乗算メソッドのテストを作成する
- 日本語のメソッド名でわかりやすくする
- 値を比較検証する
- [コラム]日本語のメソッド名を使うメリット
- 乗算メソッドテストの実行
乗算メソッドのテストを追加する
- 障害トレースとエラーメッセージの読み方
- テストコードの修正
除算メソッドのテストを作成する
- Calculatorクラスの設計変更
ゼロ除算を例外として送出するテストを作成する
- 除算メソッドのゼロ除算対応
- 例外の送出を検証するテスト
チュートリアルの完了
第2章 ユニットテスト
何のためにテストするのか
2.1 ソフトウェアテストとは?
ソフトウェアテストの特徴
テストケースとテストスイート
- [コラム]製造業と建築業とソフトウェア開発
ソフトウェアテストの目的
ソフトウェアテストの限界
2.2 テスト技法
ホワイトボックステストとブラックボックステスト
同値クラスに対するテスト
境界値に対するテスト
2.3 ユニットテストとは?
ユニットテストの特徴
ユニットテストの目的
ユニットテストのフレームワーク
2.4 ユニットテストのパターン
自動化されたテスト ── 繰り返しいつでも実行できること
不安定なテスト ── 結果が一定でないテストを避けること
- [コラム]実行環境とテスト
ドキュメントとしてのテスト ── 仕様書として読めること
- [コラム]テストケースとドキュメント
問題の局所化 ── テスト失敗時に問題を特定しやすいこと
不明瞭なテスト ── 可読性の低いテストコードは避けること
独立したテスト ── 実行順序に依存しないこと
- [コラム]シングルトンオブジェクトとユニットテスト
第3章 テスティングフレームワーク
ユニットテストを支えるしくみ
3.1 テスティングフレームワークとは?
xUnitフレームワーク
3.2 JUnitによるユニットテストの記法
テストメソッドのthrows句
テストメソッドを簡単に挿入する
3.3 可読性の高いテストコードの書き方
テストケース
テスト対象
- [コラム]不完全なテストケース
実測値と期待値
メソッドと副作用
4フェーズテスト
テストフィクスチャ
3.4 比較検証を行うアサーション
JUnitのアサーション
3.5 JUnitが提供するアノテーション
@Test ── テストメソッドを宣言する
- expected
- timeout
@Ignore ── テストの実行から除外する
@Before ── テストの実行前に処理を行う
@After ── テストの実行後に処理を行う
@BeforeClass ── テストの実行前に一度だけ処理を行う
- [コラム]JUnit 3スタイルのテスト
@AfterClass ── テストの実行後に一度だけ処理を行う
3.6 JUnitのテストパターン
標準的な振る舞いを検証するテスト
例外の送出を検証するテスト
コンストラクタを検証するテスト
【Part 2 JUnitの機能と拡張】
第4章 アサーション
値を比較検証するしくみ
4.1 Assertによる値の比較検証
assertThat ── 汎用的な値の比較検証
fail ── テストを失敗させる
そのほかのアサーションメソッド
4.2 Matcher APIによるアサーションの特徴
可読性の高い記述
柔軟な比較
- カスタムMatcherによる,より柔軟な比較
詳細な情報の提供
4.3 Matcher APIの使用
CoreMatchersが提供するMatcher
- is
- nullValue
- not
- notNullValue
- sameInstance
- instanceOf
JUnitMatchersが提供するMatcher
- hasItem
- hasItems
そのほかHamcrestが提供するMatcher
4.4 カスタムMatcherの作成
日付の比較検証を行うカスタムMatcherの要件
カスタムMatcherの作成手順
- IsDateクラスを作成する
- ファクトリメソッドを作成する
- コンストラクタを定義する
- matchesメソッドを実装する
- describeToメソッドを実装する
- テスト失敗メッセージの確認
カスタムMatcherのメリット
IsDateによる比較の実行結果
第5章 テストランナー
テスト実行方法の制御
5.1 コマンドラインからのJUnitの実行
テストクラスからテストを実行する
JUnitCoreクラスのしくみ
5.2 テストランナーとは?
テストランナーの設定
5.3 JUnitが提供するテストランナー
- [コラム]ユニットテストの実行結果をカスタマイズ