c# - 如何在 C# AspNet Core 中模拟 LoggerFactory

标签 c# unit-testing moq

我正在尝试为 Controller 操作编写一些单元测试。为此,我使用了 XUnit 和 Moq。 Controller 在构造函数中注入(inject)了一个 ILoggerFactory。一个最小起订量如何进行测试?

我已经尝试为 Controller 类模拟一个 Logger,然后模拟 CreateLogger 以返回模拟 Logger,但是当调用 LogInformation() 函数时我不断收到各种测试运行时 NullReferenceExceptions。

        //   Logger that yields only disappointment...          
        var mockLogger = new Mock<ILogger<JwtController>>();
        mockLogger.Setup(ml => ml.Log(It.IsAny<LogLevel>(), It.IsAny<EventId>(), It.IsAny<object>(), It.IsAny<Exception>(), It.IsAny<Func<object, Exception, string>>()));
        var mockLoggerFactory = new Mock<ILoggerFactory>();
        mockLoggerFactory.Setup(mlf => mlf.CreateLogger("JwtController")).Returns(mockLogger.Object);

我假设问题是正在调用 LogInformation,这是一个扩展方法,那么如何最小化它呢?

最佳答案

它的值(value):除了模拟 ILoggerFactory,您还可以传递一个 NullLoggerFactory 的实例。 .此 NullLoggerFactory 将返回 NullLogger 的实例.根据文档,这是一个:

Minimalistic logger that does nothing.

关于c# - 如何在 C# AspNet Core 中模拟 LoggerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45221362/

相关文章:

c# - 在不同模式中映射具有相同表的实体Entity Framework 6代码优先

c# - 安全地编写依赖于相同文件资源的单元测试?

c# - 在 monotuch/monodroid 中使用 mock 进行单元测试

c# - 返回始终为空最小起订量

C# 根本不可移植?

C#:编译器优化、函数调用和 bool 表达式短路

c# - Akka.Net ConsistencyHashing 路由器作为内存数据对象的负载均衡器

python - 如何构建Python模块以使其既可扩展又可测试?

javascript - 如何使用Mocha、Chai和Sinon检查函数被调用的参数数量?

c# - 在 asp.net 中使用最小起订量测试服务类