Maison > Questions et réponses > le corps du texte
J'ai une méthode qui est appelée plusieurs fois avec différents paramètres dans le cadre d'une méthode plus large.
$query->where("one", $id); $query->where("two", "LIKE %{$name}%"); $query->where("three", false); $query->where("four", true);
J'utilise PHPUnit 10 et je souhaite écrire un test unitaire pour cette méthode spécifique. Je veux vérifier si la méthode where
est appelée 4 fois avec certains paramètres spécifiques.
Par exemple :
$mockedQuery->expects($this->exactly(4)) ->method("where") ->with( // Here I'd like to specify the list of arguments // or perhaps a map or something ) ->willReturn($mockedQuery);
Le ->will
ci-dessus ne fonctionne pas pour spécifier différents paramètres pour des appels successifs à la même méthode (ou du moins je n'ai pas pu le faire fonctionner).
J'ai essayé d'utiliser la documentation mais je ne sais pas exactement quoi rechercher, donc c'est difficile à trouver.
P粉7983434152024-04-06 00:53:32
Je vais répondre à ma propre question car j'ai dû creuser un peu.
Pour PHPUnit 10, la méthode withConsecutive
(c'est ce que je recherche, je ne savais tout simplement pas qu'elle s'appelait ainsi) a été supprimée. Aucun remplacement officiel n'existe.
Ce problème a été posé sur le référentiel PHPUnit
La solution que j'ai utilisée est
$matcher = $this->exactly(2); $this->mock ->expects($matcher) ->method('get') ->willReturnCallback(function (string $param) use ($matcher) { match ($matcher->numberOfInvocations()) { 1 => $this->assertEquals($param, 'someValue'), 2 => $this->assertEquals($param, 'someOtherValue'), }; })