ILogger.LogLevel 在 C# 单元测试中未启用
ILogger.LogLevel is not enabled in C# unit tests
我有一个 Microsoft.Extensions.Logging.ILogger 的扩展方法,它检查给定的日志级别是否启用。然后进行实际的日志记录。
当我尝试对该方法进行单元测试时,我看到 logger.IsEnabled(logLevel) 对于单元测试项目中的所有日志级别总是 returns false,导致我的测试失败。
如果我删除这个 isEnabled 检查,那么我的单元测试就会通过。
尽管如此,在实际项目和单元测试项目的appsettings.json文件中设置了默认日志级别。
我的扩展方法的代码是:
public static class LoggerExtensions
{
public static void LogErrorExt(this ILogger logger, string? message, params object?[] args)
{
if (logger.IsEnabled(LogLevel.Error))
{
logger.LogError(message, args);
}
}
}
我的单元测试代码 class 是这样的:
[TestClass]
public class ImprovedExtensionsTests
{
private readonly Mock < ILogger > _logger;
public ImprovedExtensionsTests()
{
_logger = new Mock < ILogger > ();
}
[TestMethod]
public void TestOne()
{
_logger.Object.LogErrorExt("Testing ", 12);
_logger.Verify(x => x.Log(
LogLevel.Error,
It.IsAny < EventId > (),
It.IsAny < It.IsAnyType > (),
It.IsAny < Exception > (),
(Func < It.IsAnyType, Exception, string > ) It.IsAny < object > ()), Times.Once);
}
}
如何在单元测试项目中设置日志级别并在 运行 测试时启用它们?
您必须为您的 ILogger 模拟创建必要的设置,例如:
_logger.Setup(m => m.IsEnabled(LogLevel.Error)).Returns(true);
在调用 LogErrorExt
之前(例如直接在 _logger = new Mock<ILogger>();
之后)。
我有一个 Microsoft.Extensions.Logging.ILogger 的扩展方法,它检查给定的日志级别是否启用。然后进行实际的日志记录。 当我尝试对该方法进行单元测试时,我看到 logger.IsEnabled(logLevel) 对于单元测试项目中的所有日志级别总是 returns false,导致我的测试失败。
如果我删除这个 isEnabled 检查,那么我的单元测试就会通过。
尽管如此,在实际项目和单元测试项目的appsettings.json文件中设置了默认日志级别。
我的扩展方法的代码是:
public static class LoggerExtensions
{
public static void LogErrorExt(this ILogger logger, string? message, params object?[] args)
{
if (logger.IsEnabled(LogLevel.Error))
{
logger.LogError(message, args);
}
}
}
我的单元测试代码 class 是这样的:
[TestClass]
public class ImprovedExtensionsTests
{
private readonly Mock < ILogger > _logger;
public ImprovedExtensionsTests()
{
_logger = new Mock < ILogger > ();
}
[TestMethod]
public void TestOne()
{
_logger.Object.LogErrorExt("Testing ", 12);
_logger.Verify(x => x.Log(
LogLevel.Error,
It.IsAny < EventId > (),
It.IsAny < It.IsAnyType > (),
It.IsAny < Exception > (),
(Func < It.IsAnyType, Exception, string > ) It.IsAny < object > ()), Times.Once);
}
}
如何在单元测试项目中设置日志级别并在 运行 测试时启用它们?
您必须为您的 ILogger 模拟创建必要的设置,例如:
_logger.Setup(m => m.IsEnabled(LogLevel.Error)).Returns(true);
在调用 LogErrorExt
之前(例如直接在 _logger = new Mock<ILogger>();
之后)。