テスト駆動開発(TDD)の流れ
- まずはテストを1つ書く
- 全てのテストを走らせ、新しいテストの失敗を確認する
- 小さな変更を行う
- 全てのテストを走らせ、全て成功することを確認する
- リファクタリングを行って重複を除去する
ティスティングのパターン
Mock Object パターン
構築処理が重かったり、準備に手間がかかったりするようなリソースに依存したオブジェクトをテストする時に、決められた結果を返す、偽物のオブジェクトに代わりの作成する。
Self Shunt パターン
オブジェクトが他のオブジェクトときちんとやりとりしていることをテストしたい時は、テスト対象オブジェクトが本物だと思って話している相手が実はテストケース自身となるようなテストを書く
Log String パターン
正しい順序でメソッド呼び出しが行われていることをテストしたい時に、記録用文字列を作り、メソッド呼び出しの旅にその文字列に追記する。
Crash Test Dummy パターン
エラー処理部分のコードをテストする時に、普通にテストから叩き、例外を発生される特別のオブジェクトを使うようにする。
テストに関係があるデザインパターン
Command パターン
処理の呼び出しが、シンプルなメソッド呼び出しよりも複雑になってきた時、処理のためのオブジェクトを作成し、それを起動するようにする。
Value Objectパターン
広く共有されるものの、同一インスタンスであることをさほど重要でないオブジェクトを設計する時、オブジェクト作成時に状態を設定したら、その後決して変えないようにする。オブジェクトへの操作は必ず新しいオブジェクトを返すようにする。
Null Object パターン
特殊の状況をオブジェクトで表現する時、特殊な状況を表すオブジェクトを作り、通常のオブジェクトと同じプロトコル(メソッド群)を実装しよう。
Template Method パターン
処理の順序だけを規定し、拡張は将来に向けて開かれた状態にする時、他のメソッドを順番に呼び出すだけのメソッドを書く。
Pluggable Object パターン
バリエーションは表現するには、最もシンプルなのは、明示的な条件分岐を使う方法。
Pluggable Selector パターン
インスタンスごとに異なる振る舞いをさせるには、メソッド名を格納しておき、そのメソッドを動的に起動する。
Factory Methodパターン
オブジェクト作成に柔軟性を持たせたい時は、単にコンストラクタで作るのではなく、メソッドを使ってオブジェクトを作成する。
Imposterパターン
処理に新しいバリエーションを導入する時は、既存オブジェクトと同じプロトコルを携え、実装は異なる新たなオブジェクトを作る。
Compositeパターン
オブジェクトたちの振る舞いを組み合わせた振る舞いを持つオブジェクトを実装する時、構成要素をまとめたImposterを作る。
Collecting Parameter パターン
たくさんのオブジェクトたちの処理結果を集める時、処理のパラメータに結果格納用のオブジェクトを渡す。