シナリオ
現在開発段階にあるAPIをテストするための単体テストを作成しています。実際のオブジェクトの呼び出しの代わりに実行されるモックの配列を含むモックコンテナクラス(デコレータパターン)があります。
これらのモックコンテナは、テスト実行中にDIコンテナに配置され、モデル/コントローラの代わりにコンテナを呼び出します。ほとんどの場合、コントローラの機能は許可されますが、時にはそれらを嘲笑したいことがあります。モックコンテナは、__call
を介してアクセスできない関数呼び出しをキャッチし、割り当てられたモックデータを返すか、または内部オブジェクトに当たることによって動作します。
問題
これは、の使用の場合に正常に動作します:c['Controller_Name']
として
$this->c['Controller_Name']->functionHere()
は、私たちのモックコンテナのインスタンスですが、このアプローチの問題は、それ自体を参照するコントローラから来ていますfunctionHere
を嘲笑しなければならないときには$this->functionHere()
経由であるが、私たちのモックコンテナではなくコントローラのインスタンスである$this
でコールが発生する。
クラス自身のメンバーへの呼び出しをインターセプトするためのもっともらしい方法がありますので、私は$this->functionHere()
をキャッチし、詳細を話すことが、あなたのセットアップは、そのハード知らず$this->c['Controller_Name']->functionHere()