我使用NLog 4.5.11进行日志记录,使用Moq4.10.1进行模拟。
我有一个中间件,它使用NLog将异常细节写入日志文件。
我需要在API项目中对中间件进行单元测试,并检查记录的消息是否有合适的值。
我是这样声明异常记录器的:
private static Logger _exceptionLogger = LogManager.GetLogger("ExceptionLogger");
im是如何在中间件构造函数中初始化Logmanager的:
LogManager.LoadConfiguration(String.Concat(Directory.GetCurrentDirectory(), "/nlog.config"));
下面是im记录异常消息的方式:
_exceptionLogger.Error(exceptionMessage);
我们有什么办法可以做到这一点,而不实际写入和读取文件中的日志消息?
发布于 2021-02-02 07:10:15
建议在单元测试中使用记忆目标,而不是模拟记录器。
例如:
// Arrange
var config = new NLog.Config.LoggingConfiguration();
var memoryTarget = new NLog.Targets.MemoryTarget();
memoryTarget.Layout = "${message}"; // Message format
config.AddRuleForAllLevels(memoryTarget);
LogManager.Configuration = config;
// Act
// Your call
// Assert
var logEvents = target.Logs;
// E.g. contains message in logEvents
PS:请注意,在上面的示例中使用了全局LogManager,因此不能并行运行测试。如果需要并行测试,则创建一个新的LogFactory并将LogFactory或已创建的记录器传递给您的类/方法。
https://stackoverflow.com/questions/66004805
复制相似问题