1
resposta

Erro na instancia do Lance

Olá, quando vou executar os testes aparece essa mensagem de erro:

Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveBuscar3MaioresValores with data set #2 (Alura\Leilao\Model\Leilao Object (...))
TypeError: Argument 1 passed to Alura\Leilao\Service\Avaliador::Alura\Leilao\Service\{closure}() must be an instance of Alura\Leilao\Service\Lance, instance of Alura\Leilao\Model\Lance given

Meu teste está assim:

 public function entregaLeiloes()
    {
        return [
            [$this->leilaoEmOrdemCrescente()],
            [$this->leilaoEmOrdemDecrescente()],
            [$this->leilaoEmOrdemAleatoria()],
        ];

    }

    public function leilaoEmOrdemCrescente()
    {
        $leilao = new Leilao('Fiat 147 0km');

        $maria = new Usuario('Maria');
        $joao = new Usuario('Joao');
        $ana = new Usuario('Ana');

        $leilao->recebeLance(new Lance($ana, 1700));
        $leilao->recebeLance(new Lance($joao, 2000));
        $leilao->recebeLance(new Lance($maria, 2500));

        return [
            [$leilao]
        ];
    }

E minha classe está assim:

class Leilao
{
    /** @var Lance[] */
    private $lances;
    /** @var string */
    private $descricao;

    public function __construct(string $descricao)
    {
        $this->descricao = $descricao;
        $this->lances = [];
    }

    public function recebeLance(Lance $lance)
    {
        $this->lances[] = $lance;
    }

    /**
     * @return Lance[]
     */
    public function getLances(): array
    {
        return $this->lances;
    }
}
1 resposta

Olá Francislaine, tudo bem?

Gostaria de pedir desculpas pela demora em responder o seu tópico.

O erro que está aparecendo indica que o método Alura\Leilao\Service\Avaliador::Alura\Leilao\Service\{closure}() espera uma instância da classe Alura\Leilao\Service\Lance, mas está recebendo uma instância da classe Alura\Leilao\Model\Lance.

Pelo que pude ver no seu código, você está utilizando a classe Alura\Leilao\Model\Lance no método recebeLance da classe Leilao. Verifique se você está importando a classe correta no arquivo onde está o método Alura\Leilao\Service\Avaliador::Alura\Leilao\Service\{closure}().

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software