2012-03-02 27 views
11

PHPUnitを使用して、メソッドが予期されたパラメータ、つまりの戻り値で呼び出されたかどうかをテストするオブジェクトをモックできますか? docPHPunit:パラメータと戻り値を持つメソッドをモックする方法

、両方そこパラメータ、または戻り値を渡すと例がありますが、ない...

私はこれを使用してみました:

 
// My object to test 
$hoard = new Hoard(); 
// Mock objects used as parameters 
$item = $this->getMock('Item'); 
$user = $this->getMock('User', array('removeItem')); 
... 
$user->expects($this->once()) 
    ->method('removeItem') 
    ->with($this->equalTo($item)); 
$this->assertTrue($hoard->removeItemFromUser($item, $user)); 

買いだめので、私の主張はに失敗:: removeItemFromUser()は、trueのUser :: removeItem()の戻り値を返す必要があります。

 
$user->expects($this->once()) 
    ->method('removeItem') 
    ->with($this->equalTo($item), $this->returnValue(true)); 
$this->assertTrue($hoard->removeItemFromUser($item, $user)); 

また、次のメッセージで失敗します。 "呼び出しユーザーのためのパラメータ数:: removeItem(Mock_Item_767aa2dbオブジェクト(...))が低すぎる"

 
$user->expects($this->once()) 
    ->method('removeItem') 
    ->with($this->equalTo($item)) 
    ->with($this->returnValue(true)); 
$this->assertTrue($hoard->removeItemFromUser($item, $user)); 

はまたで失敗"PHPUnit_Framework_Exception:パラメータマッチャーが既に定義されており、再定義できません。"

このメソッドを正しくテストするにはどうすればよいですか。

答えて

18

withの代わりにwillを使用する必要があります。これはreturnValueとお友達になります。

$user->expects($this->once()) 
    ->method('removeItem') 
    ->with($item) // equalTo() is the default; save some keystrokes 
    ->will($this->returnValue(true)); // <-- will instead of with 
$this->assertTrue($hoard->removeItemFromUser($item, $user)); 
関連する問題