3
respostas

Garantindo que método nunca foi executado

Opinião do Instrutor

Adicionamos 2 "verify"s no teste:

    [Test]
        public void NaoDeveAtualizaOsLeiloesEncerrados()
        {
            DateTime data = new DateTime(2014, 05, 05);

            Leilao leilao1 = new Leilao("Tv 20 polegadas");
            leilao1.naData(data);

            List<Leilao> listaRetorno = new List<Leilao>();
            listaRetorno.Add(leilao1);

            var dao = new Mock<LeilaoDaoFalso>();
            dao.Setup(m => m.correntes()).Returns(listaRetorno);

            EncerradorDeLeilao encerrador = new EncerradorDeLeilao(dao.Object);
            encerrador.encerra();

            // verify aqui !
            dao.Verify(m => m.atualiza(leilao1),Times.Never());


        }

Dúvidas: O Instrutor fala que foram adicionados 2 verifys, mas só achei 1. A data que foi utilizada como teste, faz com que o método Atualiza seja chamado e a intenção desse exercício não é fazer com que ele não seja chamado?

mock.EncerradorDeLeilaoTest.NaoDeveAtualizaOsLeiloesEncerrados:
Moq.MockException : 
Expected invocation on the mock should never have been performed, but was 1 times: m => m.atualiza(.leilao1)
No setups configured.

Performed invocations:
LeilaoDaoFalso.correntes()
LeilaoDaoFalso.atualiza(mock.dominio.Leilao)
3 respostas

Olá, Denise!

Você tem razão, só existe um método verify, e não 2.

Quanto ao teste ter falhado, a intenção é essa mesma: garantir que o método atualiza nunca seja chamado. Mas não se preocupe de o teste ter falhado. Se o teste em si está correto ou não, ou se a classe dao está correta ou não, não importa aqui. O importante é que você aprenda a criar um Verify com `Never´.

Boa sorte e bons estudos!

Responde da seguinte maneira para testar:

dao.Verify(m => m.encerrados(), Times.Never());

Se alguém ainda tiver dúvida aqui, pra que o teste passe é preciso trocar a linha:

DateTime data = new DateTime(2014, 05, 05);

Por:

DateTime data = DateTime.Now;

Assim o "atualiza" não vai ser chamado já que esses leilões foram criados hoje e só atualizamos os que tem 7 dias ou mais, fica:

[Test]
        public void NaoDeveAtualizaOsLeiloes()
        {
            DateTime data = DateTime.Now;

            Leilao leilao1 = new Leilao("Tv 20 polegadas");
            leilao1.naData(data);

            List<Leilao> listaRetorno = new List<Leilao>();
            listaRetorno.Add(leilao1);

            var dao = new Mock<LeilaoDaoFalso>();
            dao.Setup(m => m.correntes()).Returns(listaRetorno);

            EncerradorDeLeilao encerrador = new EncerradorDeLeilao(dao.Object);
            encerrador.encerra();

            // verify aqui !
            dao.Verify(d => d.atualiza(leilao1), Times.Never);
        }