直到现在,我们还是通过遵循此approach来嘲笑ILogger.LogXXX
调用。
不幸的是,在将项目更新到.net core 3.0之后,如果您使用严格的模拟(Moq),它将始终抱怨没有相应的设置:
Moq.MockException : ILogger.Log<FormattedLogValues>(LogLevel.Information, 0,
Inicio de cancelamento de reserva: Grm.GestaoFrotas.Dtos.Reservas.Mensagens.MsgCancelamentoReserva,
null,
Func<FormattedLogValues, Exception, string>) invocation failed with mock behavior Strict.
All invocations on the mock must have a corresponding setup.
不幸的是,我不能像这样简单地用FormattedLogValues
更改对象:
_container.GetMock<ILogger<GestorReservas>>()
.Setup(l => l.Log(It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<FormattedLogValues>(),
It.IsAny<Exception>(),
It.IsAny<Func<FormattedLogValues, Exception, string>()));
这是行不通的,因为FormattedLogValues
是内部的。
我总是可以更改模拟策略(严格限制),但我希望保持原样(严格)。那么,有关如何解决此问题的任何线索?
谢谢。
答案 0 :(得分:0)
尝试一下:
// <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
// <PackageReference Include="Moq" Version="4.13.1" />
container.GetMock<ILogger<GestorReservas>>()
.Setup(l => l.Log(It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>())));