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

erro antigo do codigo

boa noite eu estou em duvida em uma parte pois depois que fiz a alteração do codigo para deixa a class avalia no leilão, ela deu o erro do valor não ser igual a 100

class Leilao:
    def __init__(self, descricao):
        self.descricao = descricao
        self.__lances = []
        # menor valor para que consiga buscar
        self.maior_lance = sys.float_info.min
        # maior valor para que consiga buscar
        self.menor_lance = sys.float_info.max

    def propoe(self, lance: Lance):
        if lance.valor > self.maior_lance:
            self.maior_lance = lance.valor
        if lance.valor < self.menor_lance:
            self.menor_lance = lance.valor

        self.__lances.append(lance)

    @property
    def lances(self):
        return self.__lances[:]

ai o erro deu isso

FAILED (failures=1)

1.7976931348623157e+308 != 100.0

Expected :100.0 Actual :1.7976931348623157e+308

7 respostas

Olá Erick.

Poderia disponibilizar o teste que está falhando, gostaria de entender como está utilizando a classe.

    def test_deve_retornar_o_maior_e_o_menor_valor_quando_o_leilao_tiver_tres_lances(self):
        yuri = Usuario('Yuri')
        lance_do_yuri = Lance(yuri, 100.0)
        vini = Usuario('Vini')

        lance_do_vini = Lance(vini, 200.0)

        leilao = Leilao('Celular')

        leilao.propoe(lance_do_yuri)
        leilao.propoe(self.lance_do_gui)
        leilao.propoe(lance_do_vini)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, leilao.maior_lance)

Testei a sua classe Leilao com esse teste e ela funcionou corretamente.

Fico no aguardo, bons estudos.

o meu esta igual mas não sei o porque desse erro, eu só mudei a class avaliador, e inclui no leilão, antes estava funcionando sem o erro

Olá Erick.

Para eu conseguir visualizar seu erro preciso que você mande como está fazendo o teste que está gerando o erro.

Fico no aguardo, bons estudos.

Sim, tente especificar a dúvida para que possamos respondê-la melhor. Fica a dica ;)

o codigo que estou usando eu copie para testas é o do fim da aula que seria esse:

import sys


class Usuario:

    def __init__(self, nome):
        self.__nome = nome

    @property
    def nome(self):
        return self.__nome


class Lance:

    def __init__(self, usuario, valor):
        self.usuario = usuario
        self.valor = valor


class Leilao:

    def __init__(self, descricao):
        self.descricao = descricao
        self.__lances = []
        self.maior_lance = sys.float_info.min
        self.menor_lance = sys.float_info.max

    def propoe(self, lance: Lance):
        if lance.valor > self.maior_lance:
            self.maior_lance = lance.valor
        if lance.valor < self.menor_lance:
            self.menor_lance = lance.valor

        self.__lances.append(lance)

    @property
    def lances(self):
        return self.__lances[:]

e esse seria o te teste que eu estou fazendo

from unittest import TestCase
from dominio import Usuario, Lance, Leilao

class TestAvaliador(TestCase):

    def setUp(self):
        self.gui = Usuario("Gui")

        self.lance_do_gui = Lance(self.gui, 150.0)

        self.leilao = Leilao("Celular")

    #test_quando_adicionados_em_ordem_crescent_deve_retornar_o_maior_e_o_menor_valor_de_um_lance
    def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_crescente(self):
        yuri = Usuario("Yuri")
        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(self.lance_do_gui)

        #avaliador = Avaliador()
        #avaliador.avalia(self.leilao)

        menor_valor_esperado= 100.0
        maior_valor_esperado= 150.0

        #self.assertEqual(menor_valor_esperado, avaliador.menor_lance)
        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        #self.assertEqual(maior_valor_esperado, avaliador.maior_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_decrescente(self):
        yuri = Usuario("Yuri")
        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_yuri)

        menor_valor_esperado= 100.0
        maior_valor_esperado= 150.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

    def test_deve_retornar_o_mesmo_valor_para_o_maior_lance_quando_leilao_tiver_um_lance(self):
        self.leilao.propoe(self.lance_do_gui)

        self.assertEqual(150.0, self.leilao.menor_lance)
        self.assertEqual(150.0, self.leilao.maior_lance)

    def test_deve_retornar_o_mesmo_valor_para_o_maior_lance_quando_leilao_tiver_tres_lance(self):
        vini = Usuario("Vini")
        yuri = Usuario("Yuri")

        lance_do_yuri = Lance(yuri, 100.0)
        lance_do_vini = Lance(vini, 200.0)

        leilao = Leilao("Celular")

        leilao.propoe(self.lance_do_gui)
        leilao.propoe(lance_do_yuri)
        leilao.propoe(lance_do_vini)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

e eu segui tudo que o instrutor disse mas eu não sei o porque que deu esse erro pois estava funcionando normal e depois que tirei a class avaliador ele começou a dar o erro

solução!

Olá Erick.

No ultimo teste você declara um novo Leilão na variável leilao.

        leilao = Leilao("Celular")

        leilao.propoe(self.lance_do_gui)
        leilao.propoe(lance_do_yuri)
        leilao.propoe(lance_do_vini)

Porem quando vai verificar os lances mínimo e máximo do leilão você utiliza a variável self.leilao.

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

Dessa maneira você está validando os dados de um leilão que não tem nenhum lance e então os valores minimos e maximos são os mesmos definidos no __init__.

Para resolver isso você deve decidir se vai usar o leilão criado no setUp que é o self.leilão ou o leilão criado no teste. A primeira opção parece fazer mais sentido para continuar o padrão dos outros testes.

    def test_deve_retornar_o_mesmo_valor_para_o_maior_lance_quando_leilao_tiver_tres_lance(self):
        vini = Usuario("Vini")
        yuri = Usuario("Yuri")

        lance_do_yuri = Lance(yuri, 100.0)
        lance_do_vini = Lance(vini, 200.0)

        self.leilao.propoe(self.lance_do_gui)
        self.leilao.propoe(lance_do_yuri)
        self.leilao.propoe(lance_do_vini)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 200.0

        self.assertEqual(menor_valor_esperado, self.leilao.menor_lance)
        self.assertEqual(maior_valor_esperado, self.leilao.maior_lance)

Usando o self.leilao, criado no setUp , em todo o teste você deve conseguir o resultado esperado.

Espero ter ajudado, qualquer duvida não hesite em perguntar. Bons Estudos.

puts entendi muito grato pela ajuda igor