recherche

Maison  >  Questions et réponses  >  le corps du texte

PHPUnit 10 permet de spécifier différents paramètres de méthode lors de l'appel consécutif de la même méthode

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粉639667504P粉639667504317 Il y a quelques jours1641

répondre à tous(1)je répondrai

  • P粉798343415

    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'),
                    };
                })

    répondre
    0
  • Annulerrépondre