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

Sem o método equal o teste passou!

Olá, Na aula 2 do curso de TDD, há a inserção do método equals na classe Usuário. Antes de inseri-lo, rodei os testes e não houve erros. Isto está correto?

Classe de teste

package br.com.caelum.leilao.test;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

import br.com.caelum.leilao.servico.Lance;
import br.com.caelum.leilao.servico.Leilao;
import br.com.caelum.leilao.servico.Usuario;

public class LeilaoTest {

    @Test
    public void deveReceberUmLance() {
        Leilao leilao = new Leilao("Macbook Pro 15");
        assertEquals(0,leilao.getLances().size());

        leilao.propoe(new Lance(new Usuario("Steve Jobs"), 2000));

        assertEquals(1, leilao.getLances().size());
        assertEquals(2000, leilao.getLances().get(0).getValor(), 0000.1);
    }

    @Test
    public void deveReceberVariosLances() {
        Leilao leilao = new Leilao("Macbook Pro 15");
        leilao.propoe(new Lance(new Usuario("Steve Jobs"), 2000));
        leilao.propoe(new Lance(new Usuario("Steve Wozniak"), 3000));

        assertEquals(2, leilao.getLances().size());
        assertEquals(2000, leilao.getLances().get(0).getValor(), 0.00001);
        assertEquals(3000, leilao.getLances().get(1).getValor(), 0.00001);
    }

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

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

        assertEquals(1, leilao.getLances().size());
        assertEquals(2000, leilao.getLances().get(0).getValor(), 0.00001);
    }

}

Classe Leilao

package br.com.caelum.leilao.servico;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Leilao {

    private String descricao;
    private List<Lance> lances;

    public Leilao(String descricao) {
        this.descricao = descricao;
        this.lances = new ArrayList<Lance>();
    }

    public void propoe(Lance lance) {
        if(lances.isEmpty() || !lances.get(lances.size()-1).getUsuario().equals(lance.getUsuario())){
            lances.add(lance);
        }
    }

    public String getDescricao() {
        return descricao;
    }

    public List<Lance> getLances() {
        return Collections.unmodifiableList(lances);
    }
}

Classe Usuario

package br.com.caelum.leilao.servico;

public class Usuario {

    private int id;
    private String nome;

    public Usuario(String nome) {
        this(0, nome);
    }

    public Usuario(int id, String nome) {
        this.id = id;
        this.nome = nome;
    }

//    @Override
//    public int hashCode() {
//        final int prime = 31;
//        int result = 1;
//        result = prime * result + id;
//        result = prime * result + ((nome == null) ? 0 : nome.hashCode());
//        return result;
//    }
//
//    @Override
//    public boolean equals(Object obj) {
//        if (this == obj)
//            return true;
//        if (obj == null)
//            return false;
//        if (getClass() != obj.getClass())
//            return false;
//        Usuario other = (Usuario) obj;
//        if (id != other.id)
//            return false;
//        if (nome == null) {
//            if (other.nome != null)
//                return false;
//        } else if (!nome.equals(other.nome))
//            return false;
//        return true;
//    }

    public int getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }
}
1 resposta
solução!

Olá Roger!

Todas as classes já tem um método equals pois o herdam da classe Object que já tem o equals implementado, por isso quando se declara o equals em alguma classe é necessário utilizar a anotação @Override.

Se tiver mais dúvidas você pode dar uma olhada nesse link: https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html

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