1
resposta

O Código correto de testes seria dessa forma?

@Test
    public void deveAtualizarLeiloesEncerrados(){

        RepositorioDeLeiloes  leilaoDaoMockado =   mock(LeilaoDao.class);

        when(leilaoDaoMockado.correntes()).thenReturn(listaLeiloesAntigos);

        listaLeiloesAntigos.stream().forEachOrdered(Leilao::encerra);

        List<Leilao> listaAtualizadaComLeiloesEncerrados = listaLeiloesAntigos.stream().peek(l -> l.isEncerrado())
                                                                                       .collect(Collectors.toList());

        listaAtualizadaComLeiloesEncerrados.forEach(l -> leilaoDaoMockado.atualiza(l));


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

        assertEquals(2, encerrador.getTotalEncerrados());
        assertTrue(listaAtualizadaComLeiloesEncerrados.get(0).isEncerrado());
        assertTrue(listaAtualizadaComLeiloesEncerrados.get(1).isEncerrado());

        verify(leilaoDaoMockado, never()).salva(listaLeiloesAntigos.get(0));  // Nunca foi chamado
        verify(leilaoDaoMockado, atLeast(1)).atualiza(listaLeiloesAntigos.get(0)); // Foi chamado qualquer número de vezes
        verify(leilaoDaoMockado, atLeastOnce()).atualiza(listaLeiloesAntigos.get(0)); //Foi chamado pelo menos 1X
        verify(leilaoDaoMockado, times(2)).atualiza(listaLeiloesAntigos.get(0)); // Foi chamado 2 vezes
        verify(leilaoDaoMockado, atLeast(2)).atualiza(listaLeiloesAntigos.get(0));  //Foi chamado pelo menos 2X
        verify(leilaoDaoMockado, atMost(2)).atualiza(listaLeiloesAntigos.get(0));  //Foi chamado no máximo 2X



        /*
            Não concordo com a resolução do instrutor, pois a sequência esta desordenada já que há um método com nome "encerra" 
            pertencente a classe "EncerradorDeLeilao.java" e também um método:

            public void encerra() {  this.encerrado = true; } que pertence a classe Leilao.java

            Além de ser uma lista de leilões a condição FOR não segue o ciclo de uma lista, a minha solução foi de
            resolver com Java 8, caso tenha uma solução melhor, favor inserir aqui ou enviar para meu e-mail:
            tibaestiago@gmail.com     
        */
    }
1 resposta

Oi Tiago tudo bem? Compilou o código e funcionou normalmente? Não se preocupe muito com solução melhor ou pior. Estamos aqui para aprender e o professor ensinou daquela forma por um motivo didático.

Se quer aprender a melhor forma de fazer um código procure pelos cursos de refatoração e design patterns. Eu também pensava assim quando estava fazendo os cursos de C# mas quando fiz o curso de refatoração entendi. Estes cursos de refatoração e design patterns sim vão se preocupar em dizer o melhor jeito de programar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software