繁体   English   中英

在Asup.net Core 2.0中的Startup类的IServiceCollection中添加其他服务以进行集成测试

[英]Adding additional services to IServiceCollection in Startup class for Integration test in asp.net core 2.0

我想将IServiceCollection对象中的其他服务从我的集成测试项目添加到Startup.cs。
我将TestConfiguration添加到集成测试的WebHostBuilder的ConfigureServices方法中,但在启动类之前调用​​了它,因此测试配置被覆盖。

测试类TestSetup.cs

 var builder = new WebHostBuilder()
                .UseEnvironment("development")
                .UseContentRoot(contentRoot)
                  .ConfigureServices(TestConfigureServices)
                .UseStartup<Startup>();



 private void TestConfigureServices(IServiceCollection serviceCollection)
        {
            serviceCollection.AddSingleton((c) =>
                new TokenClient(TokenEndpoint,
                                "api.public.client",
                                "psdfsrfsdf",
                                innerHttpMessageHandler: _handler));
        }

API项目Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
services.AddSingleton((b) =>
                new TokenClient(m.AccessTokenUrl,
                                SecurityConfig.PublicApiClientId,
                                SecurityConfig.PublicApiClientPassword));
        }

我认为您需要为生产和测试创建不同的Startup类。 然后,必要的Startup将根据当前版本“选择”。 例:

public class Startup  
{    
  public void ConfigureServices(IServiceCollection services)
  {    
    services.AddTransient<IYourService, YourService>();
  }
}

public class StartupTesting  
{    
  public void ConfigureServices(IServiceCollection services)
  {   
    services.AddTransient<IYourService, YourMockedService>();
  }
}


var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
//var assemblyName = typeof(StartupTesting).GetTypeInfo().Assembly.FullName;

var host = new WebHostBuilder()  
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup(assemblyName)
    .Build();

host.Run();

更新:

还有第二种方法-在一个Startup类中使用特定于环境的方法。 但是我的拙见是,这会导致测试和登台代码之间的耦合过多。

您可以在此处看到示例

从ASP Core 2.1开始, WebHostBuilder上提供了ConfigureTestServices方法,该方法在从Startup.cs注册后运行。 因此,您的代码如下所示:

 var builder = new WebHostBuilder()
            .UseEnvironment("development")
            .UseContentRoot(contentRoot)
              .ConfigureTestServices(TestConfigureServices)
            .UseStartup<Startup>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM