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

Undefined property: Lance::$getValor

Ao rodar o código phpunit AvaliadorTest, recebo a seguinte mensagem:

PHPUnit 7.2.3 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 183 ms, Memory: 4.00MB

There was 1 error:

1) AvaliadorTest::testDeveAceitarLancesEmOrdemDecrecente
Undefined property: Lance::$getValor

/home/vagrant/projects/testeAuto/Avaliador.php:10
/home/vagrant/projects/testeAuto/AvaliadorTeste.php:26

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

Segue meus códigos abaixo:

AvaliadorTest.php

<?php
    require "Usuario.php";
    require "Lance.php";
    require "Leilao.php";
    require "Avaliador.php";

    use PHPUnit\Framework\TestCase;

    class AvaliadorTest extends TestCase
    {
        public function testDeveAceitarLancesEmOrdemDecrecente()
        {
            $leilao = new Leilao("Patinho de borracha");

            $renan = new Usuario("Renan");
            $jose = new Usuario("José");
            $mirian = new Usuario("Mirian");
            $mafalda = new Usuario("Mafalda");

            $leilao->propoe(new Lance($renan,10));
            $leilao->propoe(new Lance($jose,9));
            $leilao->propoe(new Lance($mirian,8));
            $leilao->propoe(new Lance($mafalda,7));

            $leiloeiro = new Avaliador();
            $leiloeiro->avalia($leilao);

            $maiorEsperado = 10;
            $menorEsperado = 7;

            $this->assertEquals($maiorEsperado, $leiloeiro->getMaiorLance());
            $this->assertEquals($menorEsperado, $leiloeiro->getMenorLance());    
        }
    }
?>

Avaliador.php

<?php 
    class Avaliador
    {
        public $maiorValor = -INF;
        public $menorValor = INF;

        public function avalia(Leilao $leilao)
        {
            foreach($leilao->getLances() as $lance){
                if($lance->getValor > $this->maiorValor)
                {
                    $this->maiorValor = $lance->getValor();
                }
                if($lance->getValor > $this->maiorValor)
                {
                    $this->menorValor = $lance->getValor();                    
                }
            }
        }

        public function getMaiorLance()
        {
            return $this->$maiorValor;
        }

        public function getMenorLance()
        {
            return $this->$menorValor;
        }
    }
?>

index.php

<?php
    require "AvaliadorTest.php";   

    $teste = new AvaliadorTeste.php;
    $teste->testDeveAceitarLancesEmOrdemDecrecente();

Os demais códigos não foram alterados.

5 respostas

Oi Eduardo, na sua função:

public function getMaiorLance()
{
    return $this->$maiorValor;
}

Tira o $ do maiorValor, ficando assim:

public function getMaiorLance()
{
    return $this->maiorValor;
}

O $ deve aparecer antes do nome da variável e não do atributo ou método.

Abraço!

Edit:

Opa olhei aqui e faz isso também pro método menorValor, tem um $ sobrando lá (:


insira seu código aqui

insira seu código aqui

Opa! Corrigi as observações, porém o erro persiste. Teria alguma idéia do que possa ser?

PHPUnit 7.2.3 by Sebastian Bergmann and contributors.

E 1 / 1 (100%)

Time: 179 ms, Memory: 4.00MB

There was 1 error:

1) AvaliadorTest::testDeveAceitarLancesEmOrdemDecrecente Undefined property: Lance::$getValor

/home/vagrant/projects/testeAuto/Avaliador.php:10 /home/vagrant/projects/testeAuto/AvaliadorTest.php:26

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

Código corrigido

Avaliador.php

<?php class Avaliador { public $maiorValor = -INF; public $menorValor = INF;

public function avalia(Leilao $leilao) { foreach($leilao->getLances() as $lance){ if($lance->getValor > $this->maiorValor) { $this->maiorValor = $lance->getValor(); } if($lance->getValor < $this->menorValor) { $this->menorValor = $lance->getValor(); } } }

public function getMaiorLance() { return $this->maiorValor; }

public function getMenorLance() { return $this->menorValor; } } ?>

Oi Eduardo, posta o conteúdo do arquivo Lance.php

Lance.php

<?php class Lance { private $usuario; private $valor;

function __construct(Usuario $usuario,$valor) { $this->usuario = $usuario; $this->valor = $valor; }

public function getUsuario() { return $this->usuario; }

public function getValor() { return $this->valor; } } ?>

solução!

    public function avalia(Leilao $leilao)
    {
        /* @var Lance $lance */
        foreach ($leilao->getLances() as $lance) {

            /* Tem que corrigir a chamada do método getValor da classe Lance, abaixo esta o trecho corrigido */
            if ($lance->getValor() > $this->maiorValor) {
                $this->maiorValor = $lance->getValor();
            }

            if ($lance->getValor() < $this->menorValor) {
                $this->menorValor = $lance->getValor();
            }
        }
    }