Para a dúvida do Wesley, encontrei o mesmo problema a solução que encontrei foi a seguinte.
[Fact]
public void DadaTarefaComInfoValidasDeveLogar()
{
//arrange
var tituloTarefaEsperado = "Usar Moq para aprofundar conhecimento de API";
var comando = new CadastraTarefa(tituloTarefaEsperado, new Categoria(100, "Estudo"), new DateTime(2019, 12, 31));
var mockLogger = new Mock<ILogger<CadastraTarefaHandler>>();
LogLevel levelCapturado = LogLevel.Error;
string mensagemCapturada = string.Empty;
mockLogger.Setup(
l => l.Log(
LogLevel.Debug,
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>()))
.Callback((IInvocation invocation) =>
{
var logLevel = (LogLevel)invocation.Arguments[0];
var eventId = (EventId)invocation.Arguments[1];
var state = (IReadOnlyCollection<KeyValuePair<string, object>>)invocation.Arguments[2];
var exception = invocation.Arguments[3] as Exception;
var formatter = invocation.Arguments[4] as Delegate;
var formatterStr = formatter.DynamicInvoke(state, exception);
levelCapturado = logLevel;
mensagemCapturada = formatterStr.ToString();
}
);
var mock = new Mock<IRepositorioTarefas>();
var handler = new CadastraTarefaHandler(mock.Object, mockLogger.Object);
//act
handler.Execute(comando); //SUT >> CadastraTarefaHandlerExecute
//assert
Assert.Equal(LogLevel.Debug, levelCapturado);
Assert.Contains(tituloTarefaEsperado, mensagemCapturada);
}
No entanto não consegui utilizar usando o delegate que o professor instruiu na aula, gostaria de saber se tem como utiliza-lo, mas o problema foi resolvido usando o código acima...