Używając PHPUnit, zastanawiam się, czy możemy wyśmiać obiekt do przetestowania, czy metoda jest wywoływana z oczekiwanym parametrem, i zwracaną wartością?PHPunit: Jak wyśmiać metodę, która ma parametr ORAZ zwróconą wartość
W doc istnieją przykłady z przechodzącej parametru lub zwracanej wartości, ale nie zarówno ...
Próbowałem za pomocą tego:
// 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));
Moje twierdzenie nie bo skarb :: removeItemFromUser() powinien zwracać zwróconą wartość User :: removeItem(), która jest prawdziwa.
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item), $this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
również nie z następującym komunikatem: "liczyć parametrów dla wywołania użytkownik :: removeItem (Mock_Item_767aa2db Object (...)) jest zbyt niska."
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item)) ->with($this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
nie powiedzie się również z następujący komunikat: "PHPUnit_Framework_Exception: Parameter matcher jest już zdefiniowany, nie można ponownie zdefiniować"
Co należy zrobić, aby poprawnie przetestować tę metodę.