4

グーグルモックのバックグラウンドから来て、私が間違っていない限り、これが機能しないことに驚いています。

メソッドが特定のクラスタイプで呼び出されることはなく、他のクラスタイプで呼び出される可能性があることを確認したいだけです。だからここに私が欲しいものを説明する私が持っているコードがあります:

$this->entityManagerMock
      ->expects($this->any())
      ->method('persist');
$this->entityManagerMock
     ->expects($this->never())
     ->method('persist')
     ->with($this->isInstanceOf('MySpecificClass'));

今、私はこれに似たメッセージを受け取ります:

Doctrine\ORM\EntityManager::persist(DifferentClassType Object (...)) was not expected to be called.

私がそれを処理するための最初の期待を期待するとき。

私はこれを試しましたが、結果は同じでした:

$this->entityManagerMock
      ->expects($this->any())
      ->method('persist')
      ->with($this->anything());
$this->entityManagerMock
     ->expects($this->never())
     ->method('persist')
     ->with($this->isInstanceOf('MySpecificClass'));

PHPUnitでモックを使用するのはこれが初めてですが、with壊れているか、役に立たないようです。最近のほとんどのWeb開発者はTDDを使用しているので、これを行うためのより良い方法が必要であることを私は知っています。

4

1 に答える 1

2

回避策として、次を使用できますreturnCallback

$this->entityManagerMock
     ->expects($this->any())
     ->method('persist')
     ->will($this->returnCallback(function ($object) {
         self::assertNotInstanceOf('MySpecificClass', $object);
     }));
于 2012-04-20T21:40:59.457 に答える