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 !!