Wie kann ich PHPUnit MockObjects dazu bringen, unterschiedliche Werte basierend auf einem Parameter zurückzugeben?

Ich habe ein PHPUnit-Mock-Objekt, das @ zurückgi'return value' egal was seine Argumente:

// From inside a test...
$mock = $this->getMock('myObject', 'methodToMock');
$mock->expects($this->any))
     ->method('methodToMock')
     ->will($this->returnValue('return value'));

Ich möchte in der Lage sein, einen anderen Wert basierend auf den an die Mock-Methode übergebenen Argumenten zurückzugeben. Ich habe versucht, so etwas wie:

$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"'));

Aber dies führt dazu, dass PHPUnit sich beschwert, wenn der Mock nicht mit dem Argument @ aufgerufen wir'two', also nehme ich an, dass die Definition vonmethodToMock('two') überschreibt die Definition des ersten.

Also meine Frage ist: Gibt es eine Möglichkeit, ein PHPUnit-Mock-Objekt dazu zu bringen, basierend auf seinen Argumenten einen anderen Wert zurückzugeben? Und wenn ja, wie?

Antworten auf die Frage(22)

Ihre Antwort auf die Frage