2
respostas

Dificuldade de implementar a interface "RepositorioDeLeiloes" - HELP

Conforme as aulas estou fazendo o caso de teste "deveAtualizarLeiloesEncerrados", porem devo implementar a interface "RepositorioDeLeiloes" . Segue o passo a passo da implementação, porém meu código quebrou nos casos de teste "deveEncerrarLeiloesQueComecaramUmaSemanaAtras" e "deveAtualizarLeiloesEncerrados".

Segue abaixo meu CODIGO.

CLASSE REPOSITORIO LEILAO

package br.com.caelum.leilao.infra.dao;

public interface RepositorioDeLeiloes {

private class RepositorioDeLeiloes {

    public interface RepositorioDeLeiloes {
        void salva(Leilao leilao);
        List<Leilao> encerrados();
        List<Leilao> correntes();
        void atualiza(Leilao leilao);
        }
    }}

CLASSE ENCERRADOR LEILAO

package br.com.caelum.leilao.servico;

import java.util.Calendar; import java.util.List;

import br.com.caelum.leilao.dominio.Leilao; import br.com.caelum.leilao.infra.dao.LeilaoDao; import br.com.caelum.leilao.infra.dao.LeilaoDaoFalso;

public class EncerradorDeLeilao {

private final RepositorioDeLeiloes dao;

public EncerradorDeLeilao(RepositorioDeLeiloes dao) {
    this.dao = dao;
}

private int total = 0;
private final LeilaoDao dao;

public EncerradorDeLeilao(LeilaoDao dao) {
    this.dao = dao;
    }

public void encerra() {

    List<Leilao> todosLeiloesCorrentes = dao.correntes();

    for (Leilao leilao : todosLeiloesCorrentes) {
        if (comecouSemanaPassada(leilao)) {
            leilao.encerra();
            total++;
            dao.atualiza(leilao);
        }
    }
}

private boolean comecouSemanaPassada(Leilao leilao) {
    return diasEntre(leilao.getData(), Calendar.getInstance()) >= 7;
}

private int diasEntre(Calendar inicio, Calendar fim) {
    Calendar data = (Calendar) inicio.clone();
    int diasNoIntervalo = 0;
    while (data.before(fim)) {
        data.add(Calendar.DAY_OF_MONTH, 1);
        diasNoIntervalo++;
    }

    return diasNoIntervalo;
}

public int getTotalEncerrados() {
    return total;
}

}

CLASSE ENCERRADOR DE LEILAO TESTE

package br.com.caelum.leilao.servico;

import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;

import java.util.Arrays; import java.util.Calendar; import java.util.List;

import org.junit.Test;

import br.com.caelum.leilao.builder.CriadorDeLeilao; import br.com.caelum.leilao.dominio.Leilao; import br.com.caelum.leilao.infra.dao.LeilaoDao; import br.com.caelum.leilao.infra.dao.LeilaoDaoFalso;

public class EncerradorDeLeilaoTest { @Test

public void deveEncerrarLeiloesQueComecaramUmaSemanaAtras() {

    Calendar antiga = Calendar.getInstance();
    antiga.set(1999, 1, 20);

    Leilao leilao1 = new CriadorDeLeilao().para("TV de plasma").naData(antiga).constroi();
    Leilao leilao2 = new CriadorDeLeilao().para("Geladeira").naData(antiga).constroi();

    List<Leilao> leiloesAntigos = Arrays.asList(leilao1, leilao2);

    RepositorioDeLeiloes daoFalso = (RepositorioDeLeiloes) mock(LeilaoDao.class);

    when(daoFalso.correntes()).thenReturn(leiloesAntigos);


    EncerradorDeLeilao encerrador = new EncerradorDeLeilao(daoFalso);
    encerrador.encerra();

    // vamos conferir tambem o tamanho da lista!        
    assertEquals(2, encerrador.getTotalEncerrados());
    assertTrue(leilao1.isEncerrado());
    assertTrue(leilao2.isEncerrado());
}

@Test
public void deveAtualizarLeiloesEncerrados() {

    Calendar antiga = Calendar.getInstance();
    antiga.set(1999, 1, 20);

    Leilao leilao1 = new CriadorDeLeilao().para("TV de plasma")
        .naData(antiga).constroi();

    RepositorioDeLeiloes daoFalso = mock(RepositorioDeLeiloes.class);
    when(daoFalso.correntes()).thenReturn(Arrays.asList(leilao1));

    EncerradorDeLeilao encerrador = new EncerradorDeLeilao(daoFalso);
    encerrador.encerra();

    // verificando que o metodo atualiza foi realmente invocado!
    verify(daoFalso).atualiza(leilao1);
}

}
2 respostas

Oi Priscila.

Você disse que quebrou, mas poderia postar o erro, por favor?

Está acontecendo erro quando tento rodar o Junit.

Segue abaixo fotos dos erros e do codigo: https://drive.google.com/drive/folders/1DfHnaWtNhzrkcuhOxmWahg0KeI8gaCT0?usp=sharing