.NET5 测试项目的依赖注入在哪里?
Where to wire dependency injection for .NET5 test project?
我有一个测试项目,用于测试大型 13 项目解决方案的各个部分。许多这些测试需要数据库访问(连接到测试数据库)和大量服务才能工作。目前,我所有的测试 classes 都继承自一个通用的 BaseTest class,它通过在 BaseTest 构造函数中调用以下代码来注册 DI:
public IHostBuilder CreateHostBuilder(string[] args = null) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureServices((hostContext, services) =>
{
//Omitted for brevity
_mediator = _provider.GetService<IMediator>();
});
这工作得很好,但我怀疑每次测试都不必要地调用它 class。是否有等效于 Program.cs 或测试项目可以调用此代码一次的某种方式?我在哪里可以将此代码从基本构造函数移至此处以实现此目的?
我最终转向了 XUnit。功能更加丰富,xUnit.DependencyInjection nuget 包支持直接使用 Startup.cs 进行依赖注入,就像我们习惯的那样,无需额外配置即可直接使用它:
public class Startup
{
public static void ConfigureHost(IHostBuilder hostBuilder)
{
hostBuilder.UseSerilog();
}
public static void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISomeService, SomeService>();
//...
}
}
我有一个测试项目,用于测试大型 13 项目解决方案的各个部分。许多这些测试需要数据库访问(连接到测试数据库)和大量服务才能工作。目前,我所有的测试 classes 都继承自一个通用的 BaseTest class,它通过在 BaseTest 构造函数中调用以下代码来注册 DI:
public IHostBuilder CreateHostBuilder(string[] args = null) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureServices((hostContext, services) =>
{
//Omitted for brevity
_mediator = _provider.GetService<IMediator>();
});
这工作得很好,但我怀疑每次测试都不必要地调用它 class。是否有等效于 Program.cs 或测试项目可以调用此代码一次的某种方式?我在哪里可以将此代码从基本构造函数移至此处以实现此目的?
我最终转向了 XUnit。功能更加丰富,xUnit.DependencyInjection nuget 包支持直接使用 Startup.cs 进行依赖注入,就像我们习惯的那样,无需额外配置即可直接使用它:
public class Startup
{
public static void ConfigureHost(IHostBuilder hostBuilder)
{
hostBuilder.UseSerilog();
}
public static void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISomeService, SomeService>();
//...
}
}