gpt4 book ai didi

c# - ASP.NET 核心 3.1 |如何使用服务集合进行单元测试并使用 NullLogger 作为 ILogger 实现

转载 作者:行者123 更新时间:2023-12-02 02:40:52 29 4
gpt4 key购买 nike

我想做一个单元测试来测试我的服务,但它们需要 ILogger 依赖注入(inject),我想用 IServiceProvider 存储和访问它们。对于这种情况,有 NullLogger,但我将其添加到 ServiceCollection 中的所有尝试都以以下异常结束:
无法解析类型为“Microsoft.Extensions.Logging.ILogger 1[MyProject.MyService”的服务]',同时尝试激活“MyProject.MyService”。

public class MyService
{
private readonly ILogger<MyService> _logger;

public MyService(ILogger<MyService> logger)
{
_logger = logger;
}
}

public class Tests
{
private ServiceCollection _services;
private IServiceProvider _serviceProvider;

[SetUp]
public void Setup()
{
_services = new ServiceCollection();
/* ---------------------------\/--------------------------- */

_services.AddSingleton<ILogger, NullLogger>(); // Doesn't works.
// _services.AddSingleton<ILoggerFactory, NullLoggerFactory>() Another attempt.

/* ---------------------------/\--------------------------- */
_services.AddSingleton<MyService>();
_serviceProvider = _services.BuildServiceProvider();
}

[Test]
public void SomeTest()
{
// Exception will occur on line below.
var service = _serviceProvider.GetService<MyService>();
Assert.NotNull(service);
}
}

将 NullLogger 添加到 ServiceCollection 中的正确方法是什么?

最佳答案

为了将 NullLogger 添加到服务集合并允许它注入(inject)其他服务,您应该只添加 NullLoggerProvider 而不是像单例服务一样尝试添加它。

_services.AddLogging(l => l.AddProvider(NullLoggerProvider.Instance));

完整设置方法:

[SetUp]
public void Setup()
{
_services = new ServiceCollection();
_services.AddLogging(l => l.AddProvider(NullLoggerProvider.Instance));
_services.AddSingleton<MyService>();
_serviceProvider = _services.BuildServiceProvider();
}

关于c# - ASP.NET 核心 3.1 |如何使用服务集合进行单元测试并使用 NullLogger 作为 ILogger 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649140/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com