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

Mudança feita gera erro ao rodar

Bom dia!

Efetuei as mudanças conforme visto em aula porém me retorna erro no teste, segue códigos:

FinalizarLeilaoServiceTest: package br.com.alura.leilao.service;

import java.math.BigDecimal; import java.util.ArrayList; import java.util.List;

import org.junit.Assert; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations;

import br.com.alura.leilao.dao.LeilaoDao; import br.com.alura.leilao.model.Lance; import br.com.alura.leilao.model.Leilao; import br.com.alura.leilao.model.Usuario;

class FinalizarLeilaoServiceTest {

private FinalizarLeilaoService service;

@Mock
private LeilaoDao leilaoDao;

@Mock
private EnviadorDeEmails enviadorDeEmails;

@BeforeEach
public void beforeEach() {
    MockitoAnnotations.initMocks(this);
    this.service = new FinalizarLeilaoService(leilaoDao, enviadorDeEmails);
}

@Test
void deveriaFinalizarUmLeilao() {
    List<Leilao> leiloes = leiloes();

    Mockito.when(leilaoDao.buscarLeiloesExpirados())
    .thenReturn(leiloes);

    service.finalizarLeiloesExpirados();

    Leilao leilao = leiloes.get(0);
    Assert.assertTrue(leilao.isFechado());
    Assert.assertEquals(new BigDecimal("900"),
            leilao.getLanceVencedor().getValor());

    Mockito.verify(leilaoDao).salvar(leilao);
}

private List<Leilao> leiloes() {
    List<Leilao> lista = new ArrayList<>();

    Leilao leilao = new Leilao("Celular",
            new BigDecimal("500"),
            new Usuario("Fulano"));

    Lance primeiro = new Lance(new Usuario("Beltrano"),
            new BigDecimal("600"));
    Lance segundo = new Lance(new Usuario("Ciclano"),
            new BigDecimal("900"));

    leilao.propoe(primeiro);
    leilao.propoe(segundo);

    lista.add(leilao);

    return lista;
}

}

FinalizarLeilaoService package br.com.alura.leilao.service;

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

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import br.com.alura.leilao.dao.LeilaoDao; import br.com.alura.leilao.model.Lance; import br.com.alura.leilao.model.Leilao;

@Service public class FinalizarLeilaoService {

private LeilaoDao leiloes;
private EnviadorDeEmails enviadorDeEmails;

@Autowired
public FinalizarLeilaoService(LeilaoDao leiloes, EnviadorDeEmails enviadorDeEmails) {
    this.leiloes = leiloes;
}

public void finalizarLeiloesExpirados() {
    List<Leilao> expirados = leiloes.buscarLeiloesExpirados();
    expirados.forEach(leilao -> {
        Lance maiorLance = maiorLanceDadoNoLeilao(leilao);
        leilao.setLanceVencedor(maiorLance);
        leilao.fechar();
        leiloes.salvar(leilao);

        enviadorDeEmails.enviarEmailVencedorLeilao(maiorLance);
    });
}

private Lance maiorLanceDadoNoLeilao(Leilao leilao) {
    List<Lance> lancesDoLeilao = new ArrayList<>(leilao.getLances());
    lancesDoLeilao.sort((lance1, lance2) -> {
        return lance2.getValor().compareTo(lance1.getValor());
    });
    return lancesDoLeilao.get(0);
}

}

Print do erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Oi Lucas,

No construtor da sua classe FinalizarLeilaoService faltou atribuir o segundo parâmetro e por isso o erro está acontecendo.

Era isso mesmo Rodrigo!

Muito obrigado!

Atenciosamente, Lucas Pennella.