50 votes

Dans PHPUnit, comment indiquer différents with() lors d'appels successifs à une méthode simulée ?

Je veux appeler ma méthode simulée deux fois avec des arguments attendus différents. Cela ne fonctionne pas car expects($this->once()) échouera au deuxième appel.

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

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

$mock->foo('someValue');
$mock->foo('anotherValue');

J'ai aussi essayé :

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

Mais comment ajouter un with() pour correspondre au deuxième appel ?

65voto

David Harkness Points 16674

Vous devez utiliser 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');

Notez que les index passés à at() s'appliquent à tous les appels de méthode au même objet fictif. Si le deuxième appel de méthode était bar() vous ne changeriez pas l'argument en at() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X