tag name php mocking phpunit

name - En PHPUnit, ¿cómo indico diferente con() en llamadas sucesivas a un método simulado?



get tag name wordpress (2)

Haciendo referencia a la respuesta de una pregunta similar ,

Desde PHPUnit 4.1 se puede usar con withConsecutive por ejemplo.

$mock->expects($this->exactly(2)) ->method(''set'') ->withConsecutive( [$this->equalTo(''foo''), $this->greaterThan(0)], [$this->equalTo(''bar''), $this->greaterThan(0)] );

Si quieres hacerlo volver en llamadas consecutivas:

$mock->method(''set'') ->withConsecutive([$argA1, $argA2], [$argB1], [$argC1, $argC2]) ->willReturnOnConsecutiveCalls($retValueA, $retValueB, $retValueC);

No es ideal para usar at() si puede evitarlo porque, como afirman sus documentos

El parámetro $ index para el emparejador at () se refiere al índice, que comienza en cero, en todas las invocaciones de métodos para un objeto simulado dado. Tenga cuidado al usar este emparejador, ya que puede conducir a pruebas de fragilidad que están muy relacionadas con los detalles específicos de la implementación.

Quiero llamar a mi método simulado dos veces con diferentes argumentos esperados. Esto no funciona porque las expects($this->once()) fallarán en la segunda llamada.

$mock->expects($this->once()) ->method(''foo'') ->with(''someValue''); $mock->expects($this->once()) ->method(''foo'') ->with(''anotherValue''); $mock->foo(''someValue''); $mock->foo(''anotherValue'');

También he intentado:

$mock->expects($this->exactly(2)) ->method(''foo'') ->with(''someValue'');

Pero, ¿cómo agrego un with () para que coincida con la segunda llamada?


Necesitas usar at() :

$mock->expects($this->at(0)) ->method(''foo'') ->with(''someValue''); $mock->expects($this->at(1)) ->method(''foo'') ->with(''anotherValue''); $mock->foo(''someValue''); $mock->foo(''anotherValue'');

Tenga en cuenta que los índices pasados ​​a at() aplican a todas las llamadas de método al mismo objeto simulado. Si la segunda llamada al método era bar() , no cambiaría el argumento a at() .