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

Dúvida no Ex. 55 da Aula 2 - Testando o que realmente é necessário

No teste para o método public void deveDevolverListaVaziaCasoNaoHajaLances() Diz que o teste deve passar mesmo se a lista for vazia. Pelo código

private void pegaOsMaioresNo(Leilao leilao) { maiores = new ArrayList(leilao.getLances()); Collections.sort(maiores, new Comparator() { public int compare(Lance o1, Lance o2) { if (o1.getValor() < o2.getValor()) return 1; if (o1.getValor() > o2.getValor()) return -1; return 0; } });

Como não existe um objeto Usuário que realiza um lance, então o resultado é nulo. Este nulo, no código acima deeveria retornar 0 na condição de não haver elementos para comparar,

Porém meu teste retorna null e dá erro. Não deveria ser zero dentro da condição ?

12 respostas

Ola, André Luiz Gonçalves Franco !

Como assim não existe um objeto Usuario ?

Poderia postar todo o método do seu test ?

Quando vc cria um test, vc deve passar todos os objetos necessários para que o test aconteça de forma correta e os mesmos devem estar populados.

Coloque todo o código do seu teste!

Uma dica, coloque seu código entre as tags:

Ex.:

    @Test
    public void deveUsarATagParaPostarCodigo() { 

    }

Abraço !

| Exatamente, no exercício o teste é pra quando não houver lance, se não existe lance não existe usuário certo ?

@Test public void deveDevolverListaVaziaCasoNaoHajaLances() {

Leilao leilao = new Leilao(descricao());

Avaliador leiloeiro = new Avaliador(); leiloeiro.avalia(leilao);

List maiores = leiloeiro.getTresMaiores(); System.out.println(maiores); assertEquals(0, maiores.size()); }

private String descricao() { return "PlaySation 4"; } |

| package br.com.caelum.leilao;

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

import br.com.caelum.leilao.dominio.Lance; import br.com.caelum.leilao.dominio.Leilao;

public class Avaliador {

private double maiorDetodos = Double.NEGATIVE_INFINITY; private double menorDeTodos = Double.POSITIVE_INFINITY; private double media = 0; private List maiores; // private List maiores;

public void avalia(Leilao leilao) {

double total = 0; for (Lance lance : leilao.getLances()) { if (lance.getValor() > maiorDetodos) { maiorDetodos = lance.getValor(); } if (lance.getValor() < menorDeTodos) { menorDeTodos = lance.getValor(); } //total += lance.getValor(); // media = total / leilao.getLances().size(); pegaOsMaioresNo(leilao); } } private void pegaOsMaioresNo(Leilao leilao) { maiores = new ArrayList(leilao.getLances()); Collections.sort(maiores, new Comparator() { public int compare(Lance o1, Lance o2) { if (o1.getValor() < o2.getValor()) return 1; else if (o1.getValor() > o2.getValor()) return -1; else return 0; } }); maiores = maiores.subList(0, maiores.size() > 3 ? 3 : maiores.size()); }

public List getTresMaiores() { return this.maiores; }

public double getMaiorLance() { return maiorDetodos; }

public double getMenorLance() { return menorDeTodos; }

public double getMediaLance() { return media; }

}

|

Desculpe mas não consigo identificar que tags são estas.

Ola André !

Use essa formatação:

  • É possível criar blocos de código adicionando três backticks (```) antes e depois do código
  • Para escapar a formatação, utilize crases dessa _forma_
  • Serão exibidas apenas tags HTML e XML que estiverem entre ``

Do lado superior direito desta caixa de texto tem um botão "Formatação", clique nele para saber mais sobre como formatar código.

Abraço!

@Test

    public void deveDevolverListaVaziaCasoNaoHajaLances() {

        Leilao leilao = new Leilao(descricao());

        Avaliador leiloeiro = new Avaliador();
        leiloeiro.avalia(leilao);

        List<Lance> maiores = leiloeiro.getTresMaiores();
        System.out.println(maiores);
        assertEquals(0, maiores.size());
    }

Segue minha classe Avaliador

package br.com.caelum.leilao;

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

import br.com.caelum.leilao.dominio.Lance;
import br.com.caelum.leilao.dominio.Leilao;

public class Avaliador {

    private double maiorDetodos = Double.NEGATIVE_INFINITY;
    private double menorDeTodos = Double.POSITIVE_INFINITY;
    private double media = 0;
    private List<Lance> maiores;
    // private List<Lance> maiores;

    public void avalia(Leilao leilao) {

        double total = 0;
        for (Lance lance : leilao.getLances()) {
            if (lance.getValor() > maiorDetodos) {
                maiorDetodos = lance.getValor();
            }
            if (lance.getValor() < menorDeTodos) {
                menorDeTodos = lance.getValor();
            }
            total += lance.getValor();
            media = total / leilao.getLances().size();
            pegaOsMaioresNo(leilao);
        }
    }

    private void pegaOsMaioresNo(Leilao leilao) {
        maiores = new ArrayList<Lance>(leilao.getLances());
        Collections.sort(maiores, new Comparator<Lance>() {
            public int compare(Lance o1, Lance o2) {
                if (o1.getValor() < o2.getValor())
                    return 1;
                else if (o1.getValor() > o2.getValor())
                    return -1;
                else
                    return 0;
            }
        });
         maiores = maiores.subList(0, maiores.size() > 3 ? 3 : maiores.size());
    }

    public List<Lance> getTresMaiores() {
        return this.maiores;
    }

    public double getMaiorLance() {
        return maiorDetodos;
    }

    public double getMenorLance() {
        return menorDeTodos;
    }

    public double getMediaLance() {
        return media;
    }

}

`

Segue o teste que verifica se a lista é vazia


@Test
    public void deveDevolverListaVaziaCasoNaoHajaLances() {

        Leilao leilao = new Leilao(descricao());

        Avaliador leiloeiro = new Avaliador();
        leiloeiro.avalia(leilao);

        List<Lance> maiores = leiloeiro.getTresMaiores();
        System.out.println(maiores);
        assertEquals(0, maiores.size());
    }

O teste falha pela lista ser nula

Ola, André Luiz Gonçalves Franco !

Agora ficou legal para ler....

André, posta todo seu código usando essa formatação, por favor.

Vamos analisar desde o inicio, OK ?

Abraço!

Andre !

Respondi bem na hora que vc estava subindo os codigos ! Rs...

Legal!

vou dar uma olhada aki!

solução!

Ola, André !

Faz um teste;

Nessa linha:

    private List<Lance> maiores;

Inicialize sua List

    private List<Lance> maiores = new ArrayList<Lance>();

Rode novamente seu teste.

Abraço!

Cristiano, deu certo.

Sempre que testo uma variável, por default eu tento inicializar ela com zero para numerico ou ' ' para string. Não estava sabendo realizar a inicialização com um array.

Como sempre passo cheio nunca precisei inicializar. Agora faz sentido pra mim. Muito obrigado pela ajuda.

André, cuidado ao inicializar.

Para esse caso, acredito que fica bem inicializar, até porque seu teste é para acessar sua List vazia.

Mas é sempre bom pensar se é legal e preciso inicializar diretamente no atributo, as vezes é melhor no construtor ou utilizando um callback.

Não faca disso uma regra, mas para esse caso, funciona bem!

Abraço!

No construtor ? Farei um teste criando um construtor. Obrigado pelas dicas.