当前位置: 首页 > 编程语言 > C#

ASP.NETCoreUseSettingfromIntegrationTest分享

时间:2023-04-10 14:09:49 C#

ASP.NETCoreUseSettingfromIntegrationTest我有一个集成测试项目,在测试类中使用.UseSetting(),如下:publicAccessTokenRetrieval():base(nameof(AccessTokenRetrieval)){varconnectionString=GetConnectionString();vardbSettings=newDbSettings(connectionString);_userGroupRepository=newUserGroupRepository(dbSettings);_roleRepository=newRoleRepository(dbSettings);_userRepository=newUserRepository(db_Settings);newTestServer(newWebHostBuilder().UseStartup().UseEnvironment("IntegrationTest").UseSetting("IntegrationTestConnString",dbSettings.IdentityServerConnectionString));_handler=_server.CreateHandler();_client=_server.CreateClient();想要在我的实际项目的Startup.cs中检索该设置。我试过这样做:publicvoidConfigureIntegrationTestServices(IServiceCollectionservices){varconnectionString=Configuration.GetValue("IntegrationTestConnString");BuildIdentityServerTests(服务,连接字符串);添加核心服务(服务,连接字符串);但这似乎返回null。检索此设置的正确方法是什么?每个测试设置要将设置传递给特定的TestHost实例,您可以使用ConfigureServices调用并覆盖默认设置注册。首先,在Startup.ConfigureServices方法中注册默认的DbSettings实例。必须使用TryAll调用:publicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){services.TryAddSingleton(newDbSettings(...));在WebHostBuilder.ConfigureServices调用中注册一个WebHostBuilder.ConfigureServices实例:_server=newTestServer(newWebHostBuilder().UseStartup().ConfigureServices(services=>{services.AddSingleton(newDbSettings(...));});当您尝试在应用程序代码中解析DbSettings时,您将获得DbSettings的实例...因为WebHostBuilder.ConfigureServices执行WebHostBuilder.ConfigureServices并且WebHostBuilder.ConfigureServices调用阻止注册默认实例。此提示允许替换您已注册的任何DI依赖项。全局设置要设置不变(包括所有测试)设置,请设置进程范围的环境变量而不是UseSetting调用:Environment.SetEnvironmentVariable("foo","bar");var_server=newTestServer(newWebHostBuilder().UseStartup());然后阅读:publicvoidConfigureServices(IServiceCollectionservices){stringsetting1=Configuration["foo"];字符串setting2=Environment.GetEnvironmentVariable("foo");您需要添加环境变量提供程序以从配置变量中读取:true)//此配置提供程序必须从配置中读取环境变量.AddEnvironmentVariables();配置=builder.Build();您可以只注入IConfigurationRoot并且可以在测试项目中使用本地配置文件。您将丢失默认的特定于环境的配置覆盖,这是新项目模板中的默认配置,但我个人不会将它们用于配置管理(更喜欢非承诺的appsetting.local.json,这对开发人员来说非常好唯一)和CI服务器)。varconfiguration=newConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile("appsettings.json",可选:false,reloadOnChange:true).AddJsonFile("appsettings.local.json",可选:true,reloadOnChange:true).AddInMemoryCollection(新字典{{“myConfig:setting1”,“value1”},{“myConfig:setting2”,“value2”}}).Build();varserver=newTestServer(newWebHostBuilder().UseUrls("http://localhost:5001").UseContentRoot(Directory.GetCurrentDirectory()).UseStartup().ConfigureServices(services=>services.AddSingleton(configuration)));对于初创公司:publicclassStartup{publicStartup(IConfigurationRootconfiguration){this.Configuration=configuration;}...}编辑:虽然这确实有效,但它似乎也打破了IOptionsSnapshot配置注入,它在运行时识别配置文件更改。我会把这个作为答案,但也会继续挖掘更好的方法来不注入自定义服务只是为了支持测试/夹具特定的配置覆盖。以上为C#学习教程:ASP.NETCoreUseSetting来自集成测试分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: