http://martinfowler.com/bliki/ObjectMother.html

オブジェクトマザーとは、テストで使用するクラスである。これはテスト用のサンプルオブジェクトを作るのに役立つものだ。

それなりの規模のシステムでテストを書くとき、膨大なサンプルデータを用意する必要があるだろう。たとえば、従業員の疾病手当の計算をテストする場合だと、従業員が必要になる。これは単なるオブジェクトではなく、配偶者の有無、扶養家族の人数、勤務履歴、給与履歴などのデータが必要である。もしかすると、オブジェクトを大量に生成しなければならないかもしれない。こうしたデータは一般に「テストフィクスチャ」と呼ばれる。

まず、フィクスチャをxUnitテストのsetUpメソッドで作成して、複数のテストで再利用できるようにする。ここでよく面倒となるのは、同じようなデータが複数のテストクラスで必要になることだ。そういうときは、ファクトリーオブジェクトを用意して、元になるフィクスチャを返すようにする。たとえば、去年採用された従業員「John」、勤続10年の「Heather」といった具合だ。

オブジェクトマザーは、ファクトリーのキャッチーな名前である。今世紀初頭にThoughtWorksのプロジェクトでつけられたものだ。いい具合にキャッチーだ。

オブジェクトマザーが作った定型オブジェクトはチームに馴染んでいく。時にはユーザーとの打ち合わせの場に登場するほど馴染んでしまうこともある。これはペルソナの記述に似ているのではないだろうか——ただし、その対象は人ではないこともある。保険約款、供給契約など、テストフレームワークが必要なものならどんなデータでも構わない。似たようなデータを複数のテストで使用していると、サンプルに馴染んでいくものだ。

こうした定型オブジェクトがうまくいかないテストもある。しかし、たいていはsetUpにちょっと追加するだけでうまくいくだろう。「Johnを2ヶ月前から病欠にしよーぜー」といった具合だ。新しい定型オブジェクトをマザーに追加しなければならないこともあるが、できるだけ既存のオブジェクトを修正するようにしてほしい。既存の定型オブジェクトに似ていれば、テストの読み手はすぐに内容を理解することができるのだ。

オブジェクトマザーにも欠点はある。特に、そうした多くのテスト同士が密接に結びついていて、それがマザーの特定のデータに依存しているような場合だ。何らかの理由で定型データを変更したいと思ったら、トリッキーになってしまう。常に問題となることではあるのだが、クラスを変更したらテストの移行も必要になってくる。

Peter Schuh と Stephanie Punkeが、 XP Universeにおいて、 オブジェクトマザーに関する論文を書いている。