Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Método withConsecutive()

Boa tarde! Atualmente fazendo o curso de testes, neste caso "Testes de integração com PHP: testando o acesso à API e ao banco de dados", utilizo o PHP 8.3 e PHPUnit 10.3.0 by Sebastian Bergmann and contributors, com estas versões o método withConsecutive() não é suportado, desta forma utilizei da seguinte forma a função abaixo:

ao invés de utilizar:

 $leilaoDao->expects($this->exactly(2))
     ->method('atualiza')
     ->withConsecutive(
         [$this->leilaoFiat147],
         [$this->leilaoVariante]
     );

utilizo abaixo:

$invokedCount = $this->exactly(2);
$leilaoDao->expects($invokedCount)
    ->method('atualiza')
    ->willReturnCallback(function (Leilao $leilao) { //->willReturnCallback(function (Leilao $leilao) use ($fiat147, $variant) {
        static $invocationCount = 0;
        $invocationCount++;

        if ($invocationCount === 1) {
            $this->assertSame($this->leilaoFiat147, $leilao);
        } elseif ($invocationCount === 2) {
            $this->assertSame($this->leilaoVariante, $leilao);
        }

        return null;
    });

quero saber se este meu código está correto ou se tem outra forma melhor de trocar o método withConsecutive()?

2 respostas
solução!

Oi Rafael! Boa noite

Excelente alternativa! Como o withConsecutive() foi removido no PHPUnit 10, o uso do willReturnCallback() com controle via contador, como você fez, é totalmente válido e funciona bem para testar as chamadas consecutivas com diferentes argumentos.

O seu código está correto e segue uma abordagem compatível com o PHPUnit 10+. A única sugestão que posso fazer apenas para deixar mais legível é extrair os asserts para fora do callback, se quiser deixar o código mais limpo, mas isso é só questão de estilo.

No momento, não há um substituto direto oficial para o withConsecutive() no PHPUnit 10. Então, a sua solução é sim uma das melhores formas de contornar isso com as versões mais recentes.

Parabéns pela adaptação! Se precisar de mais alguma coisa, estou por aqui.

Bom dia, muito obrigado por responder e pela explicação Vitória. Gratidão.