Dado o meu arquivo EncerradorTest.php
:
<?php
namespace Alura\Leilao\Tests\Service;
use Alura\Leilao\Dao\Leilao as LeilaoDao;
use Alura\Leilao\Model\Leilao;
use Alura\Leilao\Service\Encerrador;
use DateTimeImmutable;
use PHPUnit\Framework\TestCase;
class EncerradorTest extends TestCase
{
public function testLeiloesComMaisDeUmaSemanaDevemSerEncerrados()
{
// Cria o primeiro leilão
$leilao1 = new Leilao(
'Fiat 147 0KM',
new \DateTimeImmutable('8 days ago')
);
// Cria o segundo leilão
$leilao2 = new Leilao(
'Variant 1972 0KM',
new \DateTimeImmutable('10 days ago')
);
// Cria um mock da classe LeilaoDao
$leilaoDAO = $this->createMock(LeilaoDao::class);
// Imita o método "recuperarNaoFinalizados"
$leilaoDAO->method('recuperarNaoFinalizados')
->willReturn([$leilao1, $leilao2]);
// Imita o método "recuperarFinalizados"
$leilaoDAO->method('recuperarFinalizados')
->willReturn([$leilao1, $leilao2]);
// Espera que o método "atualiza" seja chamado uma vez
// para cada leilão
$leilaoDAO->expects($this->exactly(2))
->method('atualiza')
->withConsecutive(
[$leilao1],
[$leilao2]
);
// Encerra os leilões
$encerrador = new Encerrador($leilaoDAO);
$encerrador->encerra();
// Busca os leilões finalizados
$leiloesFinalizados = [$leilao1, $leilao2];
// Testa se os leilões que foram finalizados estão corretos
self::assertCount(2, $leiloesFinalizados);
self::assertTrue($leiloesFinalizados[0]->estaFinalizado());
self::assertTrue($leiloesFinalizados[1]->estaFinalizado());
}
}
E o arquivo Dao/Leilao.php
:
<?php
namespace Alura\Leilao\Dao;
use Alura\Leilao\Infra\ConnectionCreator;
use Alura\Leilao\Model\Leilao as ModelLeilao;
class Leilao
{
private $con;
public function __construct()
{
var_dump('blablabla conexão');
$this->con = ConnectionCreator::getConnection();
}
public function salva(ModelLeilao $leilao): void
{
$sql = 'INSERT INTO leiloes (descricao, finalizado, dataInicio) VALUES (?, ?, ?)';
$stm = $this->con->prepare($sql);
$stm->bindValue(1, $leilao->recuperarDescricao(), \PDO::PARAM_STR);
$stm->bindValue(2, $leilao->estaFinalizado(), \PDO::PARAM_BOOL);
$stm->bindValue(3, $leilao->recuperarDataInicio()->format('Y-m-d'));
$stm->execute();
}
/**
* @return ModelLeilao[]
*/
public function recuperarNaoFinalizados(): array
{
return $this->recuperarLeiloesSeFinalizado(false);
}
/**
* @return ModelLeilao[]
*/
public function recuperarFinalizados(): array
{
return $this->recuperarLeiloesSeFinalizado(true);
}
/**
* @return ModelLeilao[]
*/
private function recuperarLeiloesSeFinalizado(bool $finalizado): array
{
$sql = 'SELECT * FROM leiloes WHERE finalizado = ' . ($finalizado ? 1 : 0);
$stm = $this->con->query($sql, \PDO::FETCH_ASSOC);
$dados = $stm->fetchAll();
$leiloes = [];
foreach ($dados as $dado) {
$leilao = new ModelLeilao($dado['descricao'], new \DateTimeImmutable($dado['dataInicio']), $dado['id']);
if ($dado['finalizado']) {
$leilao->finaliza();
}
$leiloes[] = $leilao;
}
return $leiloes;
}
public function atualiza(ModelLeilao $leilao)
{
$sql = 'UPDATE leiloes SET descricao = :descricao, dataInicio = :dataInicio, finalizado = :finalizado WHERE id = :id';
$stm = $this->con->prepare($sql);
$stm->bindValue(':descricao', $leilao->recuperarDescricao());
$stm->bindValue(':dataInicio', $leilao->recuperarDataInicio()->format('Y-m-d'));
$stm->bindValue(':finalizado', $leilao->estaFinalizado(), \PDO::PARAM_BOOL);
$stm->bindValue(':id', $leilao->recuperarId(), \PDO::PARAM_INT);
$stm->execute();
}
}
Ao executar o comando vendor/bin/phpunit
o seguinte aparece no terminal:
$ vendor/bin/phpunit
PHPUnit 8.1.5 by Sebastian Bergmann and contributors.
............... 15 / 15 (100%)string(18) "blablabla conexão"
Time: 113 ms, Memory: 4.00 MB
OK (15 tests, 29 assertions)
De acordo com o conteúdo do vídeo, isso não deveria acontecer. Por conta disso, ao executar o conteúdo da próxima aula o programa para de funcionar. O que pode ter acontecido para ele estar executando o __construct()
?