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

Error: Classe não encontrada

Aparecem esses avisos abaixo, mesmo baixando o projeto da aula PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

EEEEE 5 / 5 (100%)

Time: 26 ms, Memory: 4.00 MB

There were 5 errors:

1) Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveEncontrarOMaiorValorDeLancesEmOrdemCrescente Error: Class 'Alura\Leilao\Model\Leilao' not found

/home/acer/Documents/php-tests/tests/Service/AvaliadorTest.php:16

2) Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveEncontrarOMaiorValorDeLancesEmOrdemDecrescente Error: Class 'Alura\Leilao\Model\Leilao' not found

/home/acer/Documents/php-tests/tests/Service/AvaliadorTest.php:38

3) Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveEncontrarOMenorValorDeLancesEmOrdemDecrescente Error: Class 'Alura\Leilao\Model\Leilao' not found

/home/acer/Documents/php-tests/tests/Service/AvaliadorTest.php:60

4) Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveEncontrarOMenorValorDeLancesEmOrdemCrescente Error: Class 'Alura\Leilao\Model\Leilao' not found

/home/acer/Documents/php-tests/tests/Service/AvaliadorTest.php:82

5) Alura\Leilao\Tests\Service\AvaliadorTest::testAvaliadorDeveBuscar3MaioresValores Error: Class 'Alura\Leilao\Model\Leilao' not found

/home/acer/Documents/php-tests/tests/Service/AvaliadorTest.php:103

ERRORS! Tests: 5, Assertions: 0, Errors: 5.

7 respostas

Melkizedek, como está o código?

LeilaoTest:

<?php

namespace Model;

use Alura\Leilao\Model\Lance; use Alura\Leilao\Model\Leilao; use Alura\Leilao\Model\Usuario; use PHPUnit\Framework\TestCase;

class LeilaoTest extends TestCase { /**

 * @dataProvider geraLances
 */
public function testLeilaoDeveReceberLances(int $qtdLances, Leilao $leilao, array $valores)
{
    static::assertCount($qtdLances, $leilao->getLances());

    foreach ($valores as $i => $valorEsperado) {
        static::assertEquals($valorEsperado, $leilao->getLances()[$i]->getValor());
    }
}

public function geraLances(): array
{
    $joao = new Usuario('João');
    $maria = new Usuario('Maria');

    $leilaoCom2Lances = new Leilao('Fiat 147 0KM');
    $leilaoCom2Lances->recebeLance(new Lance($joao, 1000));
    $leilaoCom2Lances->recebeLance(new Lance($maria, 2000));

    $leilaoCom1Lance = new Leilao('Fusca 1972 0KM');
    $leilaoCom1Lance->recebeLance(new Lance($maria, 5000));

    return [
        '2-lances' => [2, $leilaoCom2Lances, [1000, 2000]],
        '1-lance' => [1, $leilaoCom1Lance, [5000]]
    ];
}

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 testLeilaoNaoDeveAceitarMaisDeCincoLancesPorUsuario()
{
    $this->expectException(\DomainException::class);
    $this->expectExceptionMessage('Usuário não pode propor mais de 5 lances por leilão');

    $leilao = new Leilao('Brasília Amarela');
    $joao = new Usuario('João');
    $maria = new Usuario('Maria');

    $leilao->recebeLance(new Lance($joao, 1000));
    $leilao->recebeLance(new Lance($maria, 1500));
    $leilao->recebeLance(new Lance($joao, 2000));
    $leilao->recebeLance(new Lance($maria, 2500));
    $leilao->recebeLance(new Lance($joao, 3000));
    $leilao->recebeLance(new Lance($maria, 3500));
    $leilao->recebeLance(new Lance($joao, 4000));
    $leilao->recebeLance(new Lance($maria, 4500));
    $leilao->recebeLance(new Lance($joao, 5000));
    $leilao->recebeLance(new Lance($maria, 5500));
    $leilao->recebeLance(new Lance($joao, 6000));

}

AvaliadorTest:

<?php

namespace Service;

use Alura\Leilao\Model\Lance; use Alura\Leilao\Model\Leilao; use Alura\Leilao\Model\Usuario; use Alura\Leilao\Service\Avaliador; use PHPUnit\Framework\TestCase;

class AvaliadorTest extends TestCase { private $leiloeiro;

protected function setUp(): void
{
    $this->leiloeiro = new Avaliador();
}

/**
 * @dataProvider leilaoEmOrdemAleatoria
 * @dataProvider leilaoEmOrdemCrescente
 * @dataProvider leilaoEmOrdemDecrescente
 */
public function testAvaliadorDeveEncontrarOMaiorValorDeLances(Leilao $leilao)
{
    // Act - When
    $this->leiloeiro->avalia($leilao);
    $maiorValor = $this->leiloeiro->getMaiorValor();

    // Assert - Then
    self::assertEquals(2500, $maiorValor);
}

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

    $maria = new Usuario('Maria');
    $joao = new Usuario('João');
    $ana = new Usuario('Ana');

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

    return [
        'ordem-crescente' => [$leilao]
    ];
}

public function leilaoEmOrdemDecrescente(): array
{
    $leilao = new Leilao('Fiat 147 0KM');

    $maria = new Usuario('Maria');
    $joao = new Usuario('João');
    $ana = new Usuario('Ana');

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

    return [
        'ordem-decrescente' => [$leilao]
    ];
}

public function leilaoEmOrdemAleatoria(): array
{
    $leilao = new Leilao('Fiat 147 0KM');

    $maria = new Usuario('Maria');
    $joao = new Usuario('João');
    $ana = new Usuario('Ana');

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

    return [
        'ordem-aleatoria' => [$leilao]
    ];
}

public function geraLances(): array
{
    $joao = new Usuario('João');
    $maria = new Usuario('Maria');

    $leilaoCom2Lances = new Leilao('Fiat 147 0KM');
    $leilaoCom2Lances->recebeLance(new Lance($joao, 1000));
    $leilaoCom2Lances->recebeLance(new Lance($maria, 2000));

    $leilaoCom1Lance = new Leilao('Fusca 1972 0KM');
    $leilaoCom1Lance->recebeLance(new Lance($maria, 5000));

    return [
        '2-lances' => [2, $leilaoCom2Lances, [1000, 2000]],
        '1-lance' => [1, $leilaoCom1Lance, [5000]]
    ];
}

/**
 * @dataProvider geraLances
 */
public function testLeilaoDeveReceberLances(int $qtdLances, Leilao $leilao, array $valores)
{
    static::assertCount($qtdLances, $leilao->getLances());
    foreach ($valores as $i => $valorEsperado) {
        static::assertEquals($valorEsperado, $leilao->getLances()[$i]->getValor());
    }
}

public function testLeilaoVazioNaoPodeSerAvaliado()
{
    $this->expectException(\DomainException::class);
    $this->expectExceptionMessage('Não é possível avaliar leilão vazio');

    $leilao = new Leilao('Fusca Azul');
    $this->leiloeiro->avalia($leilao);
}

}

Melkizedek, isso são só os testes. Como está seu código todo? Consegue compartilhar o projeto comigo?

O erro é que a classe Leilao não está sendo encontrada. Preciso ver se ela está no local certo com o namespace correto.

Segue link para projeto no GitHub: https://github.com/melkmuller/php-tests

solução!

Baixei seu projeto e rodei os testes:

Testes passando

Nossa, agora fiquei surpreso, muito obrigado pela ajuda Vinicius, agora sei que o código está certo, deve ser alguma config aqui da minha máquina, pois uso o pc do trabalho e tem outros projetos rodando.