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

Sobre escopo de self.assertRaises()...

Olá!

No gabarito temos a seguinte implementação de um teste que certifica que não consigamos colocar lances fora de ordem no leilão:

    def test_nao_deve_permitir_propor_um_lance_em_ordem_decrescente(self):

        with self.assertRaises(LanceInvalido):
            yuri = Usuario('Yuri', 500.0)
            lance_do_yuri = Lance(yuri, 100.0)

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

O escopo desse self.assertRaises() não está um pouco abrangente demais dado que não estamos esperando que haja uma exceção tipo LanceInválido na primeira chamada de self.leilao.propoe()?

Eu sugeriria a refatoração deste teste para que fique assim:

    def test_nao_deve_permitir_propor_um_lance_em_ordem_decrescente(self):

        yuri = Usuario('Yuri', 500.0)
        lance_do_yuri = Lance(yuri, 100.0)

        self.leilao.propoe(self.lance_do_gui)
        with self.assertRaises(LanceInvalido):
            self.leilao.propoe(lance_do_yuri)

Assim só exigiremos a LanceInvalido onde ela deve acontecer e não no código todo...

O que acham?

Atc,

WB::

1 resposta
solução!

Olá Wilson, tudo bem?

Realmente, sua refatoração faz muito sentido :D.

No dia a dia, é comum limitarmos o escopo de blocos como with, try/except apenas para a parte que realmente esperamos que aconteça uma exceção e/ou que desejamos gerenciar o escopo.

Sua refatoração faz muito sentido e obrigado por passar esse feedback :D

Isso é uma forma bem legal de mostrar que todo código - até mesmo os códigos de testes - pode ser refatorado. :)