xUnit测试ASP.NET Core应用时如何设置Environment为Development
解决方案
方案1:直接在测试代码中指定环境(最便捷,无需改配置)
在调用Build()方法之前,链式调用UseEnvironment()方法强制指定环境,修改你的主机构建代码如下:
using Microsoft.Extensions.Hosting; // 其余测试类代码... this.host = Program.CreateHostBuilder(Array.Empty<string>()) .UseEnvironment(Environments.Development) .Build();
- 这里推荐直接用
Microsoft.Extensions.Hosting.Environments内置常量,避免手动拼写「Development」出错 - 该方案完全不需要修改原Web应用的任何代码,仅调整测试端的主机构建逻辑即可
方案2:通过环境变量全局指定测试环境
你可以通过设置ASPNETCORE_ENVIRONMENT环境变量为Development,让所有ASP.NET Core主机默认读取该环境配置,有两种配置方式:
本地Rider单元测试会话配置
- 点击Rider顶部菜单栏「运行」→「编辑配置」
- 在左侧列表找到「单元测试」分类,若要对所有单元测试生效,选择「默认值」下的「单元测试」
- 找到「环境变量」输入框,点击右侧的编辑按钮,添加一条键值对:
ASPNETCORE_ENVIRONMENT=Development - 保存配置后重新运行测试即可生效
测试项目级环境变量配置
也可以直接在测试项目根目录新建.runsettings文件,添加环境变量配置,所有运行该测试项目的环境都会自动读取:
<RunSettings> <RunConfiguration> <EnvironmentVariables> <ASPNETCORE_ENVIRONMENT>Development</ASPNETCORE_ENVIRONMENT> </EnvironmentVariables> </RunConfiguration> </RunSettings>
之后在Rider的设置→构建、执行、部署→单元测试中,勾选「使用指定的.runsettings文件」并选择你创建的文件即可。
注意事项
需要确保原Web项目的appsettings.Development.json文件会被复制到测试项目的输出目录,你可以在测试项目的.csproj文件中添加如下配置,自动链接并复制配置文件:
<ItemGroup> <Content Include="..\你的Web项目名\appsettings*.json" CopyToOutputDirectory="PreserveNewest" LinkBase="." /> </ItemGroup>
把路径替换成你实际Web项目的相对路径即可。
内容的提问来源于stack exchange,提问作者Chris F Carroll
相关产品推荐
相关产品推荐

