モックフィルタ

使えるのかどうかわかりませんが、Mockフィルタを作ってみた。
http://bobchin.ddo.jp/download/maple_mock.zip

使い方はそんなに難しくないと思う。

[Mock]
Hoge->method1 = "返値1"
Hoge->method1 = "返値2"
Hoge->method2 = "返値3"

[Action]
mock = "ref:Hoge"
class SampleAction
{
    var $mock;
	
    function execute()
    {
    	var_dump( $this->mock->method1('a','b') );
    	var_dump( $this->mock->method1('c','d') );
    	var_dump( $this->mock->method1('e','f') );

    	var_dump( $this->mock->isInvoked('method1') );
    	var_dump( $this->mock->isInvoked('method2') );

    	var_dump( $this->mock->getArgs('method1') );
   	
        return 'success';
    }
}

Mockセクションで、エントリをDIコンテナに登録するクラス名->メソッド名で指定します。
上記の場合、"Hoge"という名前でコンテナに登録されます。
で、そのオブジェクトのmethod1メソッドを実行した返値が値になります。
同じメソッドを複数登録した場合は実行した回数毎に変える値が変わります。
method1の1回目は"返値1"、2回目は"返値2"、3回目以降はnull

メソッド名に"*"を指定した場合は、全てのメソッドがコールされたときに対応します。
値に"ref:"を指定したときはコンテナ内のオブジェクトが返されます。

作成されるモックオブジェクトの実体はMaplex_Mock_Mockクラスで以下のメソッドがあります。

  • boolean: isInvoked($method)
    • 指定したメソッドがコールされたかどうか
  • array: getArgs($method)
    • 指定したメソッドがコールされたときの引数のリスト。キーはコールされた回数(ただし0から始まる)

色々問題はあるけど、とりあえずは使えるかなぁ・・・