网站首页 网站源码
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit.Abstractions;
namespace Dzp.Core.XunitBasic;
public abstract class Basic
{
private IServiceProvider? _serviceProvider;
private readonly IServiceCollection _services;
protected Basic(ITestOutputHelper testOutputHelper)
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.Test.json")
.Build();
Configuration = config;
_services = new ServiceCollection();
_services.AddSingleton<IConfiguration>(_ => config);
_services.AddSingleton<HttpClient>(_ => new HttpClient());
_services
.AddLogging(builder =>
{
builder.AddConfiguration(config);
builder.AddFilter(null, LogLevel.Debug).AddProvider(new XunitLoggerProvider(testOutputHelper));
});
}
protected IServiceProvider ServiceProvider => _serviceProvider ?? throw new Exception("ServiceProvider is null");
protected IConfiguration Configuration { get; }
private bool _isBuild = false;
protected void BuildService(Action<IServiceCollection>? servicesAction = null)
{
if (_isBuild) return;
servicesAction?.Invoke(_services);
_serviceProvider = _services.BuildServiceProvider();
_isBuild = true;
}
protected void ConfigureServices(Action<IServiceCollection> servicesAction)
{
if (_isBuild)
return;
servicesAction(_services);
}
protected T GetService<T>()
{
return ServiceProvider.GetService<T>() ?? throw new Exception($"service {typeof(T).Name} is null,please use method BuildService");
}
}
这段代码定义了一个名为 Basic
的抽象类,主要用于在单元测试中设置和管理依赖注入(DI)容器、配置和日志记录。它使用了 Microsoft.Extensions.DependencyInjection
、Microsoft.Extensions.Configuration
和 Microsoft.Extensions.Logging
等库。以下是代码的主要功能和结构的详细解释:
依赖注入容器的初始化:
IServiceCollection
用于注册服务和依赖项。IServiceProvider
是构建后的服务提供者,用于解析服务。配置管理:
ConfigurationBuilder
从 appsettings.Test.json
文件中加载配置,并将其注册为单例服务。日志记录:
ILogger
接口进行日志记录,配置日志记录器以输出调试级别的日志,并使用 XunitLoggerProvider
将日志输出到 xUnit 的测试输出中。服务构建:
BuildService
方法用于构建服务提供者,确保只构建一次。ConfigureServices
方法允许在构建服务之前添加额外的服务。服务解析:
GetService<T>
方法用于从服务提供者中获取指定类型的服务,如果服务未注册,则抛出异常。构造函数:
ITestOutputHelper
参数,用于将日志输出到 xUnit 测试框架的输出中。IConfiguration
和 HttpClient
)。属性:
ServiceProvider
:提供对服务提供者的访问,确保在访问之前已经构建。Configuration
:提供对配置的访问。私有字段:
_serviceProvider
:存储构建后的服务提供者。_services
:存储服务集合。_isBuild
:标记服务是否已经构建。这个类通常作为其他测试类的基类,提供了一个方便的方式来设置和管理测试所需的依赖项、配置和日志记录。子类可以通过调用 BuildService
和 GetService<T>
方法来注册和获取所需的服务,从而简化测试的设置过程。