gpt4 book ai didi

c# - 如何测试asp.net core内置的Ilogger

转载 作者:IT王子 更新时间:2023-10-29 04:09:03 25 4
gpt4 key购买 nike

我想验证一些记录的日志。我使用的是 asp.net core 内置的 ILogger,并用 asp.net core 内置的 DI 注入(inject)它:

private readonly ILogger<InvoiceApi> _logger;

public InvoiceApi(ILogger<InvoiceApi> logger)
{
_logger = logger;
}

然后我像这样使用它:_logger.LogError("error));

我试着像往常一样模拟它(用最小起订量):

MockLogger = new Mock<ILogger<InvoiceApi>>();

并将其注入(inject)到服务中进行测试:

new InvoiceApi(MockLogger.Object);

然后尝试验证:

MockLogger.Verify(m => m.LogError(It.Is<string>(s => s.Contains("CreateInvoiceFailed"))));

但它抛出:

Invalid verify on a non-virtual (overridable in VB) member: m => m.LogError

那么,我该如何验证记录的日志呢?

最佳答案

正如@Nkosi 已经说过的,您不能模拟扩展方法。你应该模拟的是the ILogger.Log method ,这LogError calls into .它使验证码有点笨拙,但它应该可以工作:

MockLogger.Verify(
m => m.Log(
LogLevel.Error,
It.IsAny<EventId>(),
It.Is<FormattedLogValues>(v => v.ToString().Contains("CreateInvoiceFailed")),
It.IsAny<Exception>(),
It.IsAny<Func<object, Exception, string>>()
)
);

(不确定这是否编译,但你明白了要点)

关于c# - 如何测试asp.net core内置的Ilogger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com