Boa noite, Espero que esteja tudo bem com vocês. ( desculpe o "textão" rs mas fiquei com duvida sobre BP rsrs ) Para o caso de não utilizar o método setUp ( nao vi uma forma de passar o callstack por parametro rs )
e utilizar a abordagem de criar um método que receba uma lista de tuple para n novos cenários, instanciando sempre uma nova classe "Avaliador" seria uma pratica "code smell" ? digo conforme o exemplo abaixo:
from unittest import TestCase
from src.leilao.dominio import Usuario, Lance, Leilao, Avaliador
class TestAvaliador(TestCase):
# outro padrao de nomenclatura:
# test_quando_adicionados_em_orde_crescente_deve_retornar_o_maior_e_o_menor_valor_de_um_lance
def list_cenarios(self,cenarios_adicionais: list = []):
cenarios = [("Gui", 100.0), ("Yuri", 150.0)]
cenarios.extend(cenarios_adicionais)
return cenarios
def criaCenario(self, must_reverse: bool = False, cenarios_adicionais: list = []):
cenarios = self.list_cenarios(cenarios_adicionais)
cenarios.sort(key=lambda tup: tup[1], reverse=must_reverse)
leilao = Leilao("Celular")
for key, value in cenarios:
usuario = Usuario(key)
lance = Lance(usuario, value)
leilao.lances.append(lance)
self.avaliador = Avaliador()
self.avaliador.avalia(leilao)
def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_crescente(self):
self.criaCenario()
menor_valor_esperado = 100.0
maior_valor_esperado = 150.0
self.assertEqual(menor_valor_esperado, self.avaliador.menor_lance)
self.assertEqual(maior_valor_esperado, self.avaliador.maior_lance)
def test_deve_retornar_o_maior_e_o_menor_valor_de_um_lance_quando_adicionados_em_ordem_decrescente(self):
self.criaCenario(True)
menor_valor_esperado = 100.0
maior_valor_esperado = 150.0
self.assertEqual(menor_valor_esperado, self.avaliador.menor_lance)
self.assertEqual(maior_valor_esperado, self.avaliador.maior_lance)
def test_deve_retornar_o_mesmo_valor_para_maior_e_menor_lance_quando_leilao_tiver_um_lance(self):
gui = Usuario("Gui")
lance_do_gui = Lance(gui, 150.0)
leilao = Leilao("Celular")
leilao.lances.append(lance_do_gui)
avaliador = Avaliador()
avaliador.avalia(leilao)
self.assertEqual(150.0, avaliador.menor_lance)
self.assertEqual(150.0, avaliador.maior_lance)
def test_deve_retornar_o_maior_e_menor_valor_quando_o_leilao_tiver_tres_lances(self):
self.criaCenario(cenarios_adicionais=[("Vini", 200.0)])
menor_valor_esperado = 100.0
maior_valor_esperado = 200.0
self.assertEqual(menor_valor_esperado, self.avaliador.menor_lance)
self.assertEqual(maior_valor_esperado, self.avaliador.maior_lance)
desculpe postar a classe toda rs, mas desta forma consegui manter na maior parte dos métodos a mesma implementação do código para teste, mudando apenas no teste de um lance do leilão. A forma que pensei seria ruim ? obs: nao vi como fazer a mesma coisa utilizando o setUp ( me refiro a inverter a ordem e add novos lances e usuarios rs )