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?