2008-11-22 30 views
53

Đây là những gì tôi có:Làm thế nào để kiểm tra một tham số thứ hai trong một PHPUnit mock object

$observer = $this->getMock('SomeObserverClass', array('method')); 
$observer->expects($this->once()) 
     ->method('method') 
     ->with($this->equalTo($arg1)); 

Nhưng phương pháp này nên lấy hai tham số. Tôi chỉ kiểm tra tham số đầu tiên đang được truyền chính xác (như $ arg1).

Làm cách nào để kiểm tra thông số thứ hai?

Trả lời

85

Tôi tin rằng cách để làm điều này là:

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->equalTo($arg1),$this->equalTo($arg2)); 

Hoặc

$observer->expects($this->once()) 
    ->method('method') 
    ->with($arg1, $arg2); 

Nếu bạn cần phải thực hiện một loại khác nhau của sự khẳng định trên arg thứ 2, bạn có thể làm điều đó, quá:

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->equalTo($arg1),$this->stringContains('some_string')); 

Nếu bạn cần đảm bảo một số đối số vượt qua nhiều xác nhận, hãy sử dụng lôgicAnd()

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->logicalAnd($this->stringContains('a'), $this->stringContains('b'))); 
+1

Tôi đã gặp phải điều này một vài tuần trước. Sử dụng: -> với ($ this-> equalTo ($ foo, $ bar) Làm việc cho tôi. – ieure

+3

@ieure Đối số thứ hai cho equalTo() là $ delta, vì vậy có thể không làm những gì bạn nghĩ làm. –

Các vấn đề liên quan