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

Praticando TDD

Meu teste que não deve aceitar mais de 5 lances de um mesmo usuário não funciona mesmo com o método implementado. O teste:

[Test]
        public void NaoDeveAceitarMaisQue5LancesDeUmMesmoUsuario()
        {
            Leilao leilao = new Leilao("Nintendo Switch");
            Assert.AreEqual(0, leilao.Lances.Count);
            Usuario jose = new Usuario("Jose");
            Usuario maria = new Usuario("Maria");


            leilao.Propoe(new Lance(jose, 1000));
            leilao.Propoe(new Lance(maria, 2000));

            leilao.Propoe(new Lance(jose, 3000));
            leilao.Propoe(new Lance(maria, 4000));

            leilao.Propoe(new Lance(jose, 5000));
            leilao.Propoe(new Lance(maria, 6000));

            leilao.Propoe(new Lance(jose, 7000));
            leilao.Propoe(new Lance(maria, 8000));

            leilao.Propoe(new Lance(jose, 9000));
            leilao.Propoe(new Lance(maria, 10000));

            leilao.Propoe(new Lance(jose, 11000));

            Assert.AreEqual(10, leilao.Lances.Count);
            Assert.AreEqual(10000, leilao.Lances[leilao.Lances.Count - 1]); //ultimo lance deve ser igual a 10000


        }

O método:

public void Propoe(Lance lance)
        {
            int total=0;
            foreach(var l in Lances)
            {
                if(l.Usuario.Equals(l.Usuario)) //se o usuario for igual ao usuario corrente
                {
                    total++;
                }
            }

            //se for o primeiro lance OU se o usuario corrente nao for igual ao usuario anterior
            if (Lances.Count == 0 || (!ultimoLance().Usuario.Equals(lance.Usuario)) && total<5)
            {
                Lances.Add(lance);
            }           

        }

        private Lance ultimoLance()
        {
            return Lances[Lances.Count - 1];
        }

O erro: Expected: 10 But was: 5 na linha Assert.AreEqual(10, leilao.Lances.Count);

2 respostas
solução!

Olá Fabiana,

O problema está no if do equals do usuário, está comparando os mesmos valores:

if(l.Usuario.Equals(l.Usuario))

ele compara se o l.Usuario é igual ao l.Usuario, por isso está dando sempre true. Tinha que comparar o l.Usuario com o lance.Usuario

Oi Lucas,

Revisei o código e deu certo agora, muito obrigada :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software