Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Programação OO

Após a refatoração da classe Leilão, os testes que comparam os atributos menor_lance e maior_lance - agora setados para 0.0, não estão passando...

class Leilao:

def __init__(self, descricao):
    self.descricao = descricao
    self.__lances = []
    self.menor_lance = 0.0
    self.maior_lance = 0.0

def propoe(self, lance: Lance):
    if  self._se_lance_e_valido(lance):
        if not self._tem_lances:
            self.menor_lance = lance.valor

        self.maior_lance = lance.valor
        self.__lances.append(lance)
    else:
        raise ValueError('Erro ao propor lance.')

@property
def quantidade_de_lances_do_leilao(self):
    return len(self.__lances)

# devolve uma "cópia" da lista
@property
def lances(self):
    return self.__lances[:]

def _tem_lances(self):
    return self.__lances

def _usuarios_diferentes(self, lance):
    return self.__lances[-1].usuario != lance.usuario

def _valor_maior_que_lance_anterior(self, lance):
    return lance.valor > self.__lances[-1].valor

def _se_lance_e_valido(self, lance):
    return not self._tem_lances() or (self._usuarios_diferentes(lance) and
                                    self._valor_maior_que_lance_anterior(lance))

==================

def test_quando_adicionados_em_ordem_crescente_deve_retornar_o_lance_de_maior_e_o_de_menor_valor(self):

    self.leilao.propoe(self.lance_do_yuri)
    self.leilao.propoe(self.lance_do_paul)

    print('')
    print(f'Executando o caso de testes: test_quando_adicionados_em_ordem_crescente_deve_retornar_o_lance_de_maior_e_o_de_menor_valor')
    print(f'{self.menor_valor_esperado} - {self.leilao.menor_lance}')
    print(f'{self.maior_valor_esperado} - {self.leilao.maior_lance}')

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

Quem pode me auxiliar?

1 resposta
solução!

Oi Otavio, tudo bom?

É natural que, ao mudar os comportamentos do sistema testes antigos parem de passar. Nesse caso, podemos adaptar nosso código para que os testes voltem a passar ou alterar os testes obsoletos caso eles deixem de fazer sentido após a alteração.

No seu caso, um detalhe chamou minha atenção:

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

Aqui, estamos puxando o maior_valor_esperado como atributo da classe de teste. Isso é estranho porque cada cenário de teste vai produzir um maior_valor_esperado diferente. Normalmente, esse tipo de coisa é definida dentro do escopo do teste não da classe.

Da uma olhada em como fica a classe de teste pronta desse capítulo:

https://github.com/alura-cursos/testes-python/blob/aula-05/tests/test_leilao.py

Abraço =)