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

AttributeError: 'Leilao' object has no attribute 'propoe'

Olá caros colegas do forum, estou com um probleminha preciso de ajuda. Dos 8 testes, apenas um esta retornando o erro citado acima.

def test_deve_subtrair_valor_da_carteira_do_usuario_quando_este_propor_um_lance():

 robson = Usuario('Robson', 100)

    leilao = Leilao('Celular')

    robson.propoe_lance(leilao, 50)

    assert robson.carteira == 50

O código do arquivo 'dominio'.

import sys

class Usuario:
    def __init__(self, nome, carteira):
        self.__nome = nome
        self.__carteira = carteira

    def propoe_lance(self, leilao, valor):
        lance = Lance(self, valor)
        leilao.prope(lance)

        self.__carteira -= valor

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

    @property
    def carteira(self):
        return self.__carteira

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 not self.__lances or self.__lances[-1].usuario != lance.usuario and lance.valor > self.__lances[-1].valor:
            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)
        else:
            raise ValueError('\033[1;35mErro ao propor lance.\033[m')

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

Segue erro retornado.

self = <TDD_com_python_testes_automatizados.Teste_Automatizado_TDD_com_python.dominio.Usuario object at 0x7f9a0e854bb0>
leilao = <TDD_com_python_testes_automatizados.Teste_Automatizado_TDD_com_python.dominio.Leilao object at 0x7f9a0e854cd0>, valor = 50

    def propoe_lance(self, leilao, valor):
        lance = Lance(self, valor)
>       leilao.prope(lance)
E       AttributeError: 'Leilao' object has no attribute 'prope'

Teste_Automatizado_TDD_com_python/dominio.py:10: AttributeError
========================================================= short test summary info =========================================================
FAILED tests/test_usuario.py::test_deve_subtrair_valor_da_carteira_do_usuario_quando_este_propor_um_lance - AttributeError: 'Leilao' obj...
======================================================= 1 failed, 7 passed in 0.09s =======================================================
2 respostas
solução!

Boa tarde Robson, o método ficou escrito errado. Ficou prope em vez de propoe. Abraço!

def propoe_lance(self, leilao, valor):
        lance = Lance(self, valor)
        leilao.prope(lance)
      AttributeError: 'Leilao' object has no attribute 'prope'

Erro de principiante Marcio Oliveira, muitíssimo obrigado pela correção.