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

Classe Avaliador dentro do método setUp

Boa noite, pessoal! Tudo bem?

Estava fazendo a implementação dos testes e decidi por minha conta tentar colocar a criação da classe Avaliador dentro do método setUp. Entretanto, quando fui rodas os testes, o mesmo falhou(test_that_returns_the_highest_and_lowest_bid_did_in_ascending_order). Alguém saberia dizer o pq isso aconteceu? Alguém tentou fazer algo semelhante? Pensei nessa ideia pelo fato de sempre se criar um avaliador em todos os test cases e também por saber que o método setUp sempre instancia novos objetos ao executar um novo teste.

O erro que aconteceu foi que os valores de maior lance e menor lance não estão sendo atualizados dentro da classe Avaliador, e assim o teste falha. Constatei isso utilizando o modo debug do pycharm. Abaixo encontra-se meu codigo e a falha gerada.

from unittest import TestCase
from domain import User, Bid, Auction, Evaluator


class TestEvaluator(TestCase):

    def setUp(self):
        # Create users
        self.gui = User("Gui")
        self.yuri = User("Yuri")

        # Create users bid
        self.bid_yuri = Bid(self.yuri, 100)
        self.bid_gui = Bid(self.gui, 150)

        # Create the auction
        self.auction = Auction("Celular")

        # Create the evaluator
        self.evaluator = Evaluator()
        self.evaluator.evaluate(self.auction)

    def test_that_returns_the_highest_and_lowest_bid_did_in_ascending_order(self):

        # Test Case - 1

        self.auction.bids.append(self.bid_yuri)
        self.auction.bids.append(self.bid_gui)

        # Test Result - 1
        lowest_value_expected = 100
        highest_value_expected = 150

        self.assertEqual(lowest_value_expected, self.evaluator.lowest_bid)
        self.assertEqual(highest_value_expected, self.evaluator.highest_bid)


    def test_that_should_returns_the_highest_and_lowest_bid_did_in_descending_order(self):

        # Test Case - 2

        self.auction.bids.append(self.bid_gui)
        self.auction.bids.append(self.bid_yuri)


        # Test Result - 2
        lowest_value_expected = 100
        highest_value_expected = 150

        self.assertEqual(lowest_value_expected, self.evaluator.lowest_bid)
        self.assertEqual(highest_value_expected, self.evaluator.highest_bid)

    def test_that_should_returns_the_same_value_to_variables_highest_and_lowest_bid_when_the_auction_has_only_one_bid(self):

        self.auction.bids.append(self.bid_gui)

        self.assertEqual(150, self.evaluator.highest_bid)
        self.assertEqual(150, self.evaluator.lowest_bid)

    def test_that_returns_the_highest_and_lowest_bid_when_the_auction_has_3_bids(self):

        vini = User("Vini")
        bid_vini = Bid(vini, 200)

        self.auction.bids.append(self.bid_gui)
        self.auction.bids.append(self.bid_yuri)
        self.auction.bids.append(bid_vini)

        lowest_value_expected = 100
        highest_value_expected = 200

        self.assertEqual(lowest_value_expected, self.evaluator.lowest_bid)
        self.assertEqual(highest_value_expected, self.evaluator.highest_bid)
# self.assertEqual(lowest_value_expected, self.evaluator.lowest_bid)
#AssertionError: 100 != 1.7976931348623157e+308
1 resposta
solução!

Dando uma analisada aqui, acredito que achei o erro.

Como o método Evaluator.evaluate() é chamado antes de que os valores dos lances sejam passados para a classe leilão(Auction), não há atualização do maior e menor lance realizado no leilão, pq o método Evaluator.evaluate() que realiza essa atualização desses atributos(highest_bid e lowest_bid) faz uso da classe Auction que não possuí nenhum lance na lista de lances.