6

phpunit で php コードをテストしていますが、問題があります。

クラスをテストしています:

class ClassName
{
  public function MethodName()
  {
    // something

    $objectName = new Object();
    $variableName = $objectName->execute();

    // something
  }
}

オブジェクトのモックを作成したい。実際のメソッド execute() を呼び出したくありません。phpunitでこれを行う方法がわかりません。私は依存性注入を知っていますが、私見では、このケースは依存性注入では解決されません。

回答ありがとうございます。私の英語でごめんなさい。

4

1 に答える 1

7

実際、このケースは依存性注入で解決できます。Object を MethodName 内でインスタンス化するのではなく、注入するとします。コンストラクター、セッター、またはメソッドのいずれを使用するかは、原則にとってそれほど重要ではありません。

class ClassName
{
    public function MethodName(Object $objectName)
    {
        // something

        $variableName = $objectName->execute();

        // something
    }
}

テストするメソッド内でオブジェクトをインスタンス化しないため、テストするときにモックを渡すことができます。

public function testMethodName(){
    $mock = $this->getMockBuilder('Object')->getMock();

    $className = new ClassName;

    $result = $className->MethodName($mock);

    $this->assertTrue($result);
}

私はこのテストメソッドを実行しませんでしたが、テスト容易性のための依存性注入のポイントを示していると思います。

于 2013-06-04T09:03:32.793 に答える