【问题标题】:Where to wire dependency injection for .NET5 test project?在哪里连接 .NET5 测试项目的依赖注入?
【发布时间】:2021-10-22 15:22:14
【问题描述】:

我有一个测试项目,测试 13 个大型项目解决方案的各个部分。许多这些测试需要数据库访问(连接到测试数据库)和大量服务才能工作。目前我所有的测试类都继承自一个通用的 BaseTest 类,该类通过在 BaseTest 构造函数中调用以下代码来注册 DI:

public IHostBuilder CreateHostBuilder(string[] args = null) =>
    Host.CreateDefaultBuilder(args)
        .UseSerilog()
        .ConfigureServices((hostContext, services) =>
        {
            //Omitted for brevity

            _mediator = _provider.GetService<IMediator>();
        });

这很好用,但我怀疑每个测试类都不必要地调用它。是否有相当于 Program.cs 或测试项目可以一次调用此代码的某种方式?我可以将这段代码从基础构造函数移到哪里来实现这一点?

【问题讨论】:

  • 查看stackoverflow.com/questions/50921675/…——这里有一些答案,包括设置夹具以及Xunit.DependencyInjection 等选项,用于将 DI 容器与单元测试配对,如果您使用的是 XUnit,例子。解决方案很大程度上取决于您使用的测试框架。
  • 我正在使用 Microsoft.VisualStudio.TestTools.UnitTesting

标签: c# unit-testing dependency-injection base-class


【解决方案1】:

我最终切换到 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>();
        //...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    相关资源
    最近更新 更多