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

Erro no teste

Olá, No exercício de dobrar o lance, houve um erro no teste e não consigo saber o que houve.

No primeiro teste, quando o método dobraLance recebe o usuário steveJobs, não houve falhas, porém mudando para billGates há um erro de java.lang.IndexOutOfBoundsException: Index 2 out-of-bounds for length 2.

O que preciso fazer para consertar este problema?

Classe de teste

@Test
    public void dobraLanceDeUsuarioTest() {
        Leilao leilao = new Leilao("Macbook Pro 15");
        Usuario steveJobs = new Usuario("Steve Jobs");
        Usuario billGates = new Usuario("Bill Gates");

        leilao.propoe(new Lance(steveJobs, 2000));
        leilao.propoe(new Lance(billGates, 3000));
        leilao.dobraLance(billGates);
        //assertEquals(4000, leilao.getLances().get(2).getValor(), 0.00001);

       assertEquals(6000,leilao.getLances().get(2).getValor(),0.0001);

    }

Classe Leilão

public void dobraLance(Usuario usuario) {
        Lance ultimoLance=null;
        for(Lance l:lances) {
            if(l.getUsuario().equals(usuario)) {
                ultimoLance = l;

            }
        }
        propoe(new Lance(usuario, ultimoLance.getValor() * 2));
    }
5 respostas

Olá Roger,

o problema provavelmente está acontecendo na hora de de você recuperar o lance do billGates. Na chamada está indo para a posição 2,

leilao.getLances().get(2)

Porém, na listas as posições começam a ser contadas a partir de 0, então deveria fazer um get para 1 para pegar o billGates

leilao.getLances().get(1)

Olá Lucas, tudo bem?

O que me deixou em dúvida foi que 2 lances foram dados:

    leilao.propoe(new Lance(steveJobs, 2000));
        leilao.propoe(new Lance(billGates, 3000));

Ou seja, as posições 0 e 1 foram preenchidas.

Ao executar o método dobraValor, não deveria preencher a posição 2?

O método propoe tem alguma validação? Do tipo o usuario nao poder dar dois lances seguidos?

Lucas, tem sim.

public void propoe(Lance lance) {
        int total = qtdDeLAncesDo(lance.getUsuario());

        if(lances.isEmpty() || (!ultimoLanceDado().getUsuario().equals(lance.getUsuario()) && total < 5)){
            lances.add(lance);
        }
    }
solução!

Por isso, ele não está conseguindo adicionar o dobrado do billGates. Então você pode pedir para dobrar o steveJobs e verificar se o valor do lance na posição 2 é 4000