2012-03-02 28 views
11

Sử dụng PHPUnit, tôi tự hỏi liệu chúng ta có thể thử một đối tượng để kiểm tra nếu một phương thức được gọi với tham số dự kiến, giá trị trả về?PHPunit: Làm thế nào để giả lập một phương thức có tham số AND trả về giá trị

Trong doc, có ví dụ với truyền thông số, hoặc giá trị trả về, nhưng không cả ...

tôi đã cố gắng sử dụng này:

 
// 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)); 

khẳng định của tôi không vì Hoard :: removeItemFromUser() phải trả về giá trị trả về của User :: removeItem(), điều này đúng.

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

Cũng không thành công với thông báo sau: "Parameter đếm cho gọi tài :: RemoveItem (Mock_Item_767aa2db Object (...)) là quá thấp."

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

Cũng không thành công với các thông báo sau: "PHPUnit_Framework_Exception: Trình so khớp thông số đã được xác định, không thể xác định lại"

Tôi nên làm gì để kiểm tra phương pháp này một cách chính xác.

Trả lời

18

Bạn cần sử dụng will thay vì with cho returnValue và bạn bè.

$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)); 
Các vấn đề liên quan