我有一个 ASP.NET Core 8 应用程序和一组集成测试。我最近将 Azure 应用程序配置添加到项目中,但是当使用
WebApplicationFactory<Program>
从集成测试运行应用程序时,我希望应用程序从 appsettings.test.json
文件而不是 Azure 获取配置值。
似乎覆盖应用程序配置/服务的标准方法是创建一个派生自
WebApplicationFactory<Program>
的类并覆盖 ConfigureWebHost()
,您可以在其中调用 builder.ConfigureAppConfiguration()
等方法,我可以在其中调用 configuration.Sources.Clear()
来清除现有的配置源然后configuration.AddJsonFile("appsettings.test.json");
此方法的问题在于,它首先按照正常启动添加 Azure Config,这意味着:
有什么方法可以让我直接为测试上下文指定配置,而不尝试删除已经设置的内容?
无需在
configuration.AddJsonFile("appsettings.test.json")
中添加 ConfigureWebHost
即可让 WebApplicationFactory
拾取特定的应用程序设置文件。您需要做的就是在您要覆盖的 ConfigureWebHost
方法中设置正确的环境。
所以在你的情况下你只需要执行以下操作。不要忘记测试 json 文件必须与您正在测试的应用程序位于同一文件夹中,而不是在测试项目中:
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureTestServices(services =>
{
}).UseEnvironment("test");
}