在 ASP.NET Core 中解决集成测试中的依赖关系

Resolving dependencies in Integration test in ASP.NET Core

我有ASP.NET核心API。我已经阅读了说明如何在 asp.net 核心中进行集成测试的文档 here。该示例设置测试服务器,然后调用控制器方法。
但是我想直接测试特定的 class 方法(不是控制器方法)?例如:

  public class MyService : IMyService
  {
      private readonly DbContext _dbContext;

      public MyService(DbContext dbContext)
      {
          _dbContext = dbContext;
      }

      public void DoSomething()
      {
          //do something here
      }             
  }

当测试开始时,我希望 startup.cs 被调用,以便所有依赖项都将得到注册。 (如 dbcontext)但我不确定在集成测试中如何解决 IMyService?

注意:我想直接测试 DoSomething() 方法的原因是因为这个方法不会被任何控制器调用。我在 API 中使用 Hangfire 进行后台处理。 Hangfire 的后台处理作业将调用 DoSomething() 方法。所以对于集成测试我想避免使用 Hangfire 并直接调用 DoSomething() 方法

当您 运行 集成测试时,您已经有一个 TestServer,从这里您可以轻松访问应用程序范围的容器。由于显而易见的原因,您无法访问 RequestServices(它仅在 HttpContext 中可用,每个请求创建一次)。

var testServer = new TestServer(new WebHostBuilder()
    .UseStartup<Startup>()
    .UseEnvironment("DevelopmentOrTestingOrWhateverElse"));

var myService = testServer.Host.Services.GetRequiredService<IMyService>();