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

Erro ao executar TestAvaliador

O programa esta dando o seguinte erro:

Error
Traceback (most recent call last):
  File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "C:\Users\Usuario\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 615, in run
    testMethod()
  File "C:\Users\Usuario\PycharmProjects\testes-python-projeto-inicial\src\leilao\test_avaliador.py", line 19, in test_avalia
    avaliador.avalia(leilao)
TypeError: avalia() missing 1 required positional argument: 'leilao'

Comparei o meu código com o das aulas, mas não achei o erro dominio.py

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 = []

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


class Avaliador:
    def __init__(self):
        self.maior_lance = sys.float_info.min
        self.menor_lance = sys.float_info.max

    def avalia(self, leilao):
        for lance in leilao.lances:
            if lance.valor > self.maior_lance:
                self.maior_lance = lance.valor
            if lance.valor < self.menor_lance:
                self.menor_lance = lance.valor

principal.py

from src.leilao.dominio import Usuario, Lance, Leilao, Avaliador

gui = Usuario('Gui')
yuri = Usuario('Yuri')

lance_do_yuri = Lance(yuri, 100.0)
lance_do_gui = Lance(gui, 150.0)

leilao = Leilao('Celular')

leilao.lances.append(lance_do_gui)
leilao.lances.append(lance_do_yuri)

for lance in leilao.lances:
    print(f'O usuario {lance.usuario.nome} deu um lance de {lance.valor}')

avaliador = Avaliador()
avaliador.avalia(leilao)

print(f'O menor lance foi de {avaliador.menor_lance} e o maior lance foi de {avaliador.maior_lance}')

test_avaliador.py

from unittest import TestCase
from src.leilao.dominio import Leilao, Usuario, Lance, Avaliador


class TestAvaliador(TestCase):
    def test_avalia(self):
        gui = Usuario("Gui")
        yuri = Usuario("Yuri")

        lance_do_yuri = Lance(yuri, 100.0)
        lance_do_gui = Lance(gui, 150.0)

        leilao = Leilao("Celular")

        leilao.lances.append(lance_do_yuri)
        leilao.lances.append(lance_do_gui)

        avaliador = Avaliador
        avaliador.avalia(leilao)

        menor_valor_esperado = 100.0
        maior_valor_esperado = 150.0

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

Mil desculpas pelo incomodo, mas não achei oque esta errado.

2 respostas
solução!

Oi Renan tudo bem ?

Dentro do método avalia, faltou dizer para o parâmetro leilão que estamos esperando um leilão.

Ficaria assim o método:

    def avalia(self, leilao: Leilao):
        for lance in leilao.lances:
            if lance.valor > self.maior_lance:
                self.maior_lance = lance.valor
            elif lance.valor < self.menor_lance:
                self.menor_lance = lance.valor 

Muito obrigado, me ajudou muito. Mas alem desse erro acabei achando mais um erro no test_avaliador Eu não coloquei () na frende de Avaliador Então esse trecho correto fica

        avaliador = Avaliador()

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