c# - 如何通过 Moq 在 .NetCore Unit Tesing 中验证 ILogger?
问题描述
我正在尝试通过 Moq 在我的项目(.net core 3.1)中测试 ILogger(Microsoft.Extensions.Logging),但是......它失败了......我试图在我的代码中捕获一个异常:
try{
//do something
}
catch (Exception e)
{
_logger.LogError(new
{
RequestId = requestId.ToString(),
Topic = "Merge files",
Message = "process failed",
Status = "Failed"
}, e);
}
我定义了模拟记录器
private readonly Mock<ILogger<MyClass>> _logger = new Mock<ILogger<MyClass>>();
这是我的 UT
_logger.Verify(
x => x.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.Is<It.IsAnyType>((v, t) => true),
It.IsAny<Exception>(),
It.Is<Func<It.IsAnyType, Exception, string>>((v, t) => true)), Times.Once);
我对其进行了调试,在我的代码中执行了日志异常方法,但最后 UT 失败,因为我收到以下消息:
预期在模拟上调用一次,但为 0 次:x => x.Log<It.IsAnyType>(It.IsAny(), It.IsAny(), It.Is<It.IsAnyType>((v, t) => True), It.IsAny(), It.Is<Func<It.IsAnyType, Exception, string>>((v, t) => True))
解决方案
推荐阅读
- flutter - Flutter Firestore 查询。我需要从特定索引开始显示订单列表
- reactjs - 如何在反应钩子中更改其他选项时更新一个选择选项
- java - 一个 Spring Boot 微服务如何知道它如何将 POST 发送到另一个服务?
- python - PynamoDB 单表设计 OrgsAndUsers
- python-3.x - 如何使 Tkinter Text 小部件只读某些字符和句子
- php - 如何使用 APNS 向多个设备发送通知
- mysql - MySQL数据库在文件转储后找不到表
- mysql - 更新 MySQL 用户密码的安全方法
- firebase - 是否可以增加 Firebase 远程配置配额限制?
- javascript - 最新创建的 GitHub 文件的名称