4
respostas

Teste de unidade

Conforme proposto no exercício, eu deveria criar pelo menos um teste de unidade. Minha ideia era a seguinte: Fazer com que retorne o nome da pessoa que deu o maior e o menor lance. Porém não estou conseguindo, acredito que seja algum detalhe que não esteja me vindo à mente. Mas mesmo assim fiz o teste de unidade proposto até dar certo mesmo que não esteja 100% correto. Já enviei o código do meu teste unidade.

4 respostas

Oi Stefano, tudo bem ?

Pensar em diversos cenários é a parte mais difícil dos testes, se você quiser postar aqui o teste que não está conseguindo posso tentar te ajudar :D

Eaí Matheus. Meu cenário para a proposta "Meu primeiro teste de unidade" é o seguinte: Eu quero que o teste me confirme que o nome da pessoa que fez o maior lance no leilão seja o esperado e o nome da pessoa que fez o menos lance no leilão seja o esperado. Veja:

Classe avaliador: public class Avaliador {
    private double maiorDeTodos = Double.NEGATIVE_INFINITY;
    private double menorDeTodos = Double.POSITIVE_INFINITY;
    private String nomeDaPessoaDoMaiorLance = "joao";
    private String nomeDaPessoaDoMenorLance = "jose";

    public void avalia(Leilao l) {
        for(Lance lance : l.getLances()){
            if(lance.getValor() > maiorDeTodos) maiorDeTodos = lance.getValor();
            if(lance.getValor() < menorDeTodos) menorDeTodos = lance.getValor();
            }
    }
    public double getMaiorLance() {
        return maiorDeTodos;
    }
    public double getMenorLance() {
        return menorDeTodos;
    }
    public String getNomeDaPessoaDoMaiorLance(String joao) {
        return nomeDaPessoaDoMaiorLance;
    }
    public String getNomeDaPessoaDoMenorLance(String jose) {
        return nomeDaPessoaDoMenorLance;
    }
}

Classe TesteDoAvaliador

public class TesteDoAvaliador {
    @Test
    public void deveEntenderLancesEmOrdemCrescente() {
        //parte 1: cenario
        Usuario stefano = new Usuario("jose");
        Usuario kamille = new Usuario("maria");
        Usuario leonardo = new Usuario("joao");
    Leilao l = new Leilao("Playstation 3");

    l.propoe(new Lance(jose, 578.0));
    l.propoe(new Lance(maria, 655.0));
    l.propoe(new Lance(joao, 790.0));
    //parte 2: executando a ação
    Avaliador leiloeiro = new Avaliador();

    leiloeiro.avalia(l);
    //parte 3: validação


    String pessoaQueDeuOMaiorLance = "joao";
    String pessoaQueDeuOMenorLance = "jose";

    Assert.assertEquals(pessoaQueDeuOMaiorLance, leiloeiro.getNomeDaPessoaDoMaiorLance(pessoaQueDeuOMaiorLance));
    Assert.assertEquals(pessoaQueDeuOMenorLance, leiloeiro.getNomeDaPessoaDoMenorLance(pessoaQueDeuOMaiorLance));
    }

}

Minha dúvida é se esse teste está correto e também, eu fiquei confuso sobre onde que ele está me confirmando o "joao" e o "jose". Eu não sei se ele está me retornando os nomes corretos porque eu especifiquei no código, ou se ele realmente está pegando o valor dos lances e pegando o nome e me retornando o nome conforme o que eu fiz..

Ele tá pegando por conta que você deixou fixo no código da classe.

Você precisa fazer a mesma coisa que faz para atualizar o valor do lance, só que vai colocar também o nome.

A validação do teste (os "assert") está correta - ela está testando se o nome da pessoa que deu o maior lance é joao, e o da pessoa que deu o menor lance é jose, de acordo com o cenário montado.

O maior problema do teste está no cenário - as variáveis jose, maria e joao não foram definidas, impedindo o teste de rodar como está. Uma dica - dê nomes significativos para as variáveis, para impedir confusão - se a variável é de um usuário chamado jose, faz sentido ela ter o nome jose, mas nunca stefano.

Depois de corrigido o problema das variáveis, se rodar o teste resultará em sucesso - mas é um falso positivo. Uma boa recomendação em testes é sempre forçar o erro, para ter certeza de que ele está testando o que deveria. Mude o cenário e a expectativa do maior lance de joao para maria - o teste vai passar a falhar (corretamente) porque o Avaliador está retornando fixo joao. Agora o trabalho é corrigir o Avaliador para que retorne realmente o nome do usuário com maior lance.