Mam obiekt makiety PHPUnit, który zwraca 'return value'
niezależnie od argumentów:
// From inside a test...
$mock = $this->getMock('myObject', 'methodToMock');
$mock->expects($this->any))
->method('methodToMock')
->will($this->returnValue('return value'));
Chcę mieć możliwość zwrócenia innej wartości na podstawie argumentów przekazanych do metody mock. Próbowałem czegoś takiego:
$mock = $this->getMock('myObject', 'methodToMock');
// methodToMock('one')
$mock->expects($this->any))
->method('methodToMock')
->with($this->equalTo('one'))
->will($this->returnValue('method called with argument "one"'));
// methodToMock('two')
$mock->expects($this->any))
->method('methodToMock')
->with($this->equalTo('two'))
->will($this->returnValue('method called with argument "two"'));
Ale to powoduje, że PHPUnit narzeka, jeśli makieta nie zostanie wywołana z argumentem 'two'
, więc zakładam, że definicja methodToMock('two')
nadpisuje definicję pierwszej.
Moje pytanie brzmi: czy istnieje sposób, aby obiekt makiety PHPUnit zwracał inną wartość na podstawie jego argumentów? A jeśli tak, to w jaki sposób?