■言葉の定義
Mockを使うにあたっては以下の役割を持つオブジェクトが存在する
(1)ターゲットオブジェクト
⇒テスト対象オブジェクト
(2)コラボレーターオブジェクト
⇒ターゲットによって生成または取得されるオブジェクト
(3)疑似オブジェクト
⇒疑似オブジェクトのパターンに従うコラボレーターのサブクラス (または実装)
(4)特化オブジェクト
⇒コラボレーターの代わりに疑似を返すよう生成メソッドをオーバーライドする、ターゲットのサブクラス
■理解した(であろう)内容
ネット上に存在するサンプルは、ターゲットとコラボレーターが同一レイヤーに存在すう事が前提になっているようだ。(ターゲットがコラボレーターをコンストラクタもしくはメソッドの引数で取得するようなクラス設計になっている)
コラボレーターとターゲットが同一レイヤーに存在する場合はそれでも問題ないが、
・ターゲットオブジェクト ⇒ 業務処理ロジック層
・コラボレーターオブジェクト ⇒ データベースアクセス層
といったケースの場合、ターゲットを利用するレイヤーはコラボレーターの存在を知らない事という設計である為、ネット上のサンプルを適用する事は難しい。
よって、ターゲットはコラボレーターの生成を必ずオーバーライド可能なファクトリーメソッドで実装し、
ターゲットを継承した特化オブジェクトにてファクトリーメソッドをオーバーライドし擬似オブジェクトを返却するようにクラス設計する事!
以上のモデルをオブジェクト図で表現してみた。
0 件のコメント:
コメントを投稿