O primeiro teste rodou direitinho, mas o segundo com a média zero apresenta erro: java.util.NoSuchElementException: No Value present
package br.com.caelum.leilao.servico;
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;
public void avalia(Leilao leilao) {
for(Lance lance : leilao.getLances()) {
if (lance.getValor() > this.maiorDeTodos) this.maiorDeTodos = lance.getValor();
if (lance.getValor() < this.menorDeTodos) this.maiorDeTodos = lance.getValor();
}
this.media = leilao.getLances().stream().mapToDouble(l -> l.getValor()).average().getAsDouble();
}
public double getMaiorLance () { return this.maiorDeTodos; }
public double getMenorLance() { return this.menorDeTodos; }
public double getMedia() { return this.media; }
}
package br.com.caelum.leilao.teste;
import org.junit.Assert;
import org.junit.Test;
import br.com.caelum.leilao.dominio.Lance;
import br.com.caelum.leilao.dominio.Leilao;
import br.com.caelum.leilao.dominio.Usuario;
import br.com.caelum.leilao.servico.Avaliador;
public class AvaliadorTest {
@Test
public void deveCalcularMedia() {
//cenario 3: lances em ordem crescente
Leilao leilao = new Leilao("PlayStation 3");
leilao.propoe(new Lance(new Usuario("Maria"), 300.0));
leilao.propoe(new Lance(new Usuario("João"), 400.0));
leilao.propoe(new Lance(new Usuario("Jose"), 500.0));
//executando a ação
Avaliador leiloeiro = new Avaliador();
leiloeiro.avalia(leilao);
//acompanhando a saida;
double mediaEsperada = 400.0;
Assert.assertEquals(mediaEsperada, leiloeiro.getMedia(), 0.00001);
}
@Test
public void testaMediaDeZeroLance(){
// cenario
Usuario ewertom = new Usuario("Ewertom");
// acao
Leilao leilao = new Leilao("Iphone 7");
Avaliador avaliador = new Avaliador();
avaliador.avalia(leilao);
//validacao
Assert.assertEquals(0, avaliador.getMedia(), 0.0001);
}
}