12

私は単純なユースケースを持っています。モック オブジェクトがデフォルト値を返すようにする setUp メソッドが必要です。

$this->myservice
        ->expects($this->any())
        ->method('checkUniqueness')
        ->will($this->returnValue(true));

しかし、いくつかのテストでは、別の値を返したい:

$this->myservice
        ->expects($this->exactly(1))
        ->method('checkUniqueness')
        ->will($this->returnValue(false));

過去に C++ 用の GoogleMock を使用したことがあり、「returnByDefault」またはそれを処理する何かがありました。これが PHPUnit で可能かどうかはわかりませんでした (API ドキュメントがなく、必要なものを見つけるためにコードを読むのが難しい)。

$this->myserviceセットアップで、モックまたはテストする必要がある他のものにそれを渡すため、新しいモックに変更することはできません。

私の唯一の他の解決策は、セットアップの利点を失い、代わりにテストごとにすべてのモックを構築する必要があることです。

4

3 に答える 3

3

setUp()パラメータを持つ別のメソッドにコードを移動できます。このメソッドは から呼び出されsetUp()、テスト メソッドからも呼び出すことができますが、パラメータはデフォルトのものとは異なります。

于 2013-01-09T13:52:32.027 に答える
1

モックの作成を続けますsetUp()が、各テストで期待値を個別に設定します。

class FooTest extends PHPUnit_Framework_TestCase {
  private $myservice;
  private $foo;
  public function setUp(){
    $this->myService = $this->getMockBuilder('myservice')->getMock();
    $this->foo = new Foo($this->myService);
  }


  public function testUniqueThing(){
     $this->myservice
        ->expects($this->any())
        ->method('checkUniqueness')
        ->will($this->returnValue(true));

     $this->assertEqual('baz', $this->foo->calculateTheThing());
  }

  public function testNonUniqueThing(){
     $this->myservice
        ->expects($this->any())
        ->method('checkUniqueness')
        ->will($this->returnValue(false));

     $this->assertEqual('bar', $this->foo->calculateTheThing());

  }


}

PHPUnit は FooTest の新しいインスタンスをインスタンス化して各テストを実行するため、2 つの期待値が互いに干渉することはありません。

于 2017-06-02T19:41:58.417 に答える