4

私は通常、オブジェクトに対してgetterメソッドとsetterメソッドを使用し、次のようなコードで操作することにより、SimpleTestでモックオブジェクトとしてテストすることに問題はありません。

Mock::generate('MyObj');
$MockMyObj->setReturnValue('getPropName', 'value')

ただし、最近、マジックインターセプター(__set()__get())を使用し、次のようなプロパティにアクセスし始めました。

$MyObj->propName = 'blah';

しかし、その手法を使用してモックオブジェクトにアクセスする特定のプロパティを作成するのは困難です。

したがって、MockObjectsにプロパティを設定する特別な方法があります。

私はやってみました:

 $MockMyObj->propName = 'test Value';

しかし、これはうまくいかないようです。プロパティにアクセスできなくなる原因が私のテストサブジェクト、モック、マジックインターセプター、またはSimpleTestであるかどうかはわかりません。

したがって、要約すると:

モックオブジェクトのメソッドをモックアップできますが、モックオブジェクトのクラスプロパティをモックアップするのに問題があります。Simpletestでモックオブジェクトにプロパティを設定することは可能ですか?

どんなアドバイスも歓迎します。

4

1 に答える 1

3

私自身の質問に答えて...

はい、魔法のインターセプターを使用するオブジェクトのモックのプロパティを設定することは可能です。他のメソッドと同じように、インターセプターメソッドの戻り値を設定するだけです。

SimpleTestの例モックオブジェクトのインターセプトされたプロパティをモックする:

このオブジェクトの場合

class MyObj 
   {

   public function __set($name, $value)
    {
    $props[$name] = $value;
    }

   public function __get($name)
    {
    return $props[$name] = $value;
    }

   }

クライアント(テスト済みのアグリゲータークラス)は、次のようなプロパティにアクセスできます。

$MyObj->propName = 'blah';
echo $MyObj->propName; //prints blah

そしてそれはそのように嘲笑することができます

Mock::generate('MyObj');
$MockMyObj = new MockMyObj();
$MockMyObj->setReturnValue('__get', 'test property value', array('propName'));

//...later on...
echo $MockMyObj->propName; //prints "test property value"

PSモックに関するその他のドキュメントは次のとおりです 。http ://www.simpletest.org/en/mock_objects_documentation.html

PPS

私は実際に以前にそれを試しましたが、私の実験は私のコードのタイプミスによって曖昧になりました。

于 2010-04-23T20:00:27.437 に答える