3
respostas

Dúvida no método que verifica lances repetidos

Boa noite, fiquei com uma dúvida após adicionado os testes:

$this->expectException(\DomainException::class);

$this->expectExceptionMessage('Usuário não pode propor 2 lances consecutivos');

Ao rodar os testes não era pra falhar? já que está sendo passado 2 lances consecutivos do mesmo usuário ?

public function testLeilaoNaoDeveReceberLancesRepetidos()
    {
        $this->expectException(\DomainException::class);
        $this->expectExceptionMessage('Usuário não pode propor 2 lances consecutivos');

        $leilao = new Leilao('Variante');
        $ana = new Usuario('Ana');

        $leilao->recebeLance(new Lance($ana, 1000));
        $leilao->recebeLance(new Lance($ana, 1500));
    }
public function recebeLance(Lance $lance)
    {
        if (!empty($this->lances) && $this->isDoUltimoUsuario($lance)) {
            throw new \DomainException('Usuário não pode propor 2 lances consecutivos');
        }

        $totalLancesUsuario = $this->quantidadeLancesPorUsuario($lance->getUsuario());

        if ($totalLancesUsuario >= 5) {
            throw new \DomainException('Usuário não pode propor mais de 5 lances por leilão');
        }

        $this->lances[] = $lance;
    }
private function isDoUltimoUsuario(Lance $lance): bool
    {
        $ultimoLance = $this->lances[count($this->lances) - 1];
        return $lance->getUsuario() == $ultimoLance->getUsuario();
    }
3 respostas

Não, Carlos. Não é pra falhar porque a expectativa está sendo cumprida. A exceção está sendo lançada com a mensagem em questão. Por que o teste falharia?

Boa noite, acho que me expressei mal, minha dúvida é justamente essa, quando rodo o teste , ele não cai na Exception, não era pra cair ? pois está sendo dado 2 lances consecutivos pelo mesmo usuário.

Obrigado!

Continuo não entendendo, Carlos. Como está dando 2 lances consecutivos com o mesmo usuário, o código lança uma exceção. Como o código lança uma exceção, o teste passa, porque é exatamente isso que o teste espera.