Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Execução do teste com Visual Studio for Mac não passa no Verify

O código implementado nessa aula, na execução no teste ainda lança exceção :

Expected invocation on the mock once, but was 0 times: l => l.Log<object>(LogLevel.Error, It.IsAny<EventId>(), It.IsAny<object>(), System.Exception: Houve um erro na inclusão de tarefas.
   at Moq.MethodCall.ThrowExceptionResponse.RespondTo(Invocation invocation)
   at Moq.MethodCall.Execute(Invocation invocation)
   at Moq.FindAndExecuteMatchingSetup.Handle(Invocation invocation, Mock mock)
   at Moq.Mock.Moq.IInterceptor.Intercept(Invocation invocation)
   at Moq.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation)
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.IRepositorioTarefasProxy.IncluirTarefas(Tarefa[] tarefas)
   at Alura.CoisasAFazer.Services.Handlers.CadastraTarefaHandler.Execute(CadastraTarefa comando) in /Volumes/HD DADOS/Alura/Mock/testes-integracao/src/Alura.CoisasAFazer.Services/Handlers/CadastraTarefaHandler.cs:line 35, It.IsAny<Func<object, Exception, string>>())

A única coisa que não é igual é que estou em um MacBook Pro usando Visual Studio for Mac.

     [Fact]
        public void QuandoExceptionForLancadaDeveLogarAMensagemDeExcecao()
        {
            //arrange
            var comando = new CadastraTarefa("EstudEstudarando Xunit", new Categoria("Estudo"), new DateTime(2020, 12, 31));
            var excecaoEsperada = new Exception("Houve um erro na inclusão de tarefas.");

            var mock = new Mock<IRepositorioTarefas>();
            mock.Setup(r => r.IncluirTarefas(It.IsAny<Tarefa[]>()))
                .Throws(excecaoEsperada);

            var mockLogger = new Mock<ILogger<CadastraTarefaHandler>>();

            var repo = mock.Object;

            var handler = new CadastraTarefaHandler(repo, mockLogger.Object);


            //act
            CommandResult resultado = handler.Execute(comando);

            //assert
            mockLogger.Verify(l => l.Log(
                LogLevel.Error, //nível de log
                It.IsAny<EventId>(),//identificador do evento
                It.IsAny<object>(),//objeto que será logado
                excecaoEsperada,//excecao que será logada
                It.IsAny<Func<object, Exception, string>>()),//função que transforma objeto+excecao >> string
                Times.Once());
        }
        public CommandResult Execute(CadastraTarefa comando)
        {
            try
            {

                var tarefa = new Tarefa
                (
                    id: 0,
                    titulo: comando.Titulo,
                    prazo: comando.Prazo,
                    categoria: comando.Categoria,
                    concluidaEm: null,
                    status: StatusTarefa.Criada
                );
                _logger.LogDebug("Persistindo a tarefa...");
                _repo.IncluirTarefas(tarefa);

                return new CommandResult(true);

            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return new CommandResult(false);
            }
        }

Preciso de ajuda !!

1 resposta
solução!

Após baixar o projeto atualizado do capítulo 5 os testes passam todos com sucesso. Isso leva-me a acreditar que há alguma coisa errada na minha implementação, vou analisar para achar a divergência.

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