2012-04-17 16 views
4

Google Mockの背景から来て、間違っていない限り、これはうまくいきません。PHPUnit Mock Multiple Expectations

は、私はちょうど方法が特定のクラス型と呼ば決してであるが、他のクラス型のために呼ばれることを確実にしたいです。だからここに私が欲しいものを説明し、私が持っているコードは次のとおりです。私はそれを処理するために、その最初の期待を期待すると

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

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

は今、私はこのようなメッセージを取得します。

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

$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を使用しているため、これを行うにはより良い方法が必要です。回避策あなたがreturnCallback使用できるよう

答えて

2

$this->entityManagerMock 
    ->expects($this->any()) 
    ->method('persist') 
    ->will($this->returnCallback(function ($object) { 
     self::assertNotInstanceOf('MySpecificClass', $object); 
    })); 
+0

を私は、アサーションはまだそれをテストし、私も 'will'を使用していませんでしたので、それは悪い考えではありませんと仮定します。ありがとう、私は上記のコードがまだ動作することを望むが、私は今これを受け入れるだろう。 – Matt