如何在 Startup class of api 项目中使用集成测试项目的设置?
How to use settings from integration testing project in the Startup class of api project?
我正在尝试为 Web api 编写集成测试,我有两个 appsettings.json 文件,一个用于 api 项目,另一个用于集成测试。我想在 Web api.
的 Startup class 中使用集成测试项目中的值(天蓝色存储连接字符串)
我已经尝试创建 CustomWebApplicatonFactory 它没有工作,因为 Web api 的启动 class 获得如下所示的设置。
//Configure services method in Startup class
public virtual void ConfigureServices(IServiceCollection services)
{
var settings = ConfigurationProvider.GetConfiguration();
services.TryAddSingleton(settings);
services.AddHttpClient();
var azureTableStorageConnectionString =
settings["AzureMainStoreConnectionStringSecretName"];
//Other Startup related code
}
我想从我的集成测试项目中更改 "azureTableStorageConnectionString" 的值。非常感谢帮助和建议。
首先,不要使用静态函数 ConfigurationProvider.GetConfiguration()
,而是将 IConfiguration
注入您的 Startup
class。通常在 Program
class 中定义的主机会为您构建它,以便您可以注入它。
那么您可以像这样自己构建一个测试主机,而不是使用 WebApplicationFactory<TStartup>
。
[Fact]
public async Task LoadWeatherForecastAsync()
{
var webHostBuilder = new WebHostBuilder()
.UseContentRoot(AppContext.BaseDirectory)
.ConfigureAppConfiguration(builder =>
{
builder.Sources.Clear();
builder.SetBasePath(AppContext.BaseDirectory);
// this is an appsettings file located in the test-project!
builder.AddJsonFile("appsettings.Testing.json", false);
})
.UseStartup<Startup>();
var host = new TestServer(webHostBuilder);
var response = await host.CreateClient().GetAsync("weatherforecast");
Assert.True(response.IsSuccessStatusCode);
}
我在 github 上创建了一个示例。您可以克隆它并尝试一下。
我正在尝试为 Web api 编写集成测试,我有两个 appsettings.json 文件,一个用于 api 项目,另一个用于集成测试。我想在 Web api.
的 Startup class 中使用集成测试项目中的值(天蓝色存储连接字符串)我已经尝试创建 CustomWebApplicatonFactory 它没有工作,因为 Web api 的启动 class 获得如下所示的设置。
//Configure services method in Startup class
public virtual void ConfigureServices(IServiceCollection services)
{
var settings = ConfigurationProvider.GetConfiguration();
services.TryAddSingleton(settings);
services.AddHttpClient();
var azureTableStorageConnectionString =
settings["AzureMainStoreConnectionStringSecretName"];
//Other Startup related code
}
我想从我的集成测试项目中更改 "azureTableStorageConnectionString" 的值。非常感谢帮助和建议。
首先,不要使用静态函数 ConfigurationProvider.GetConfiguration()
,而是将 IConfiguration
注入您的 Startup
class。通常在 Program
class 中定义的主机会为您构建它,以便您可以注入它。
那么您可以像这样自己构建一个测试主机,而不是使用 WebApplicationFactory<TStartup>
。
[Fact]
public async Task LoadWeatherForecastAsync()
{
var webHostBuilder = new WebHostBuilder()
.UseContentRoot(AppContext.BaseDirectory)
.ConfigureAppConfiguration(builder =>
{
builder.Sources.Clear();
builder.SetBasePath(AppContext.BaseDirectory);
// this is an appsettings file located in the test-project!
builder.AddJsonFile("appsettings.Testing.json", false);
})
.UseStartup<Startup>();
var host = new TestServer(webHostBuilder);
var response = await host.CreateClient().GetAsync("weatherforecast");
Assert.True(response.IsSuccessStatusCode);
}
我在 github 上创建了一个示例。您可以克隆它并尝试一下。