我正在尝试为 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/