¿Cómo puedo hacer que PHPUnit MockObjects devuelva diferentes valores basados en un parámetro?

Tengo un objeto simulado PHPUnit que devuelve'return value' no importa cuáles sean sus argumentos:

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

Lo que quiero poder hacer es devolver un valor diferente basado en los argumentos pasados al método simulado. He intentado algo como:

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

Pero esto hace que PHPUnit se queje si no se llama al simulacro con el argumento'two', así que supongo que la definición demethodToMock('two') sobrescribe la definición de la primera.

Entonces mi pregunta es: ¿hay alguna forma de obtener un objeto simulado PHPUnit para devolver un valor diferente en función de sus argumentos? Y si es así, ¿cómo?

Respuestas a la pregunta(11)

Su respuesta a la pregunta