.NET Core NUnit自动化测试项目无法读取appsettings.json的URL配置
问题原因
- 配置键层级不匹配:你的
urlName参数嵌套在Development节点下,直接读取_config["urlName"]没有匹配到正确的配置层级,因此返回null。 - 配置构建未指定基础路径:NUnit测试运行时的工作目录不一定和appsettings.json的输出目录一致,未显式指定配置文件根路径的情况下,可能出现配置文件加载失败的问题。
- 通用主机逻辑未生效:你在Program.cs中定义的
CreateHostBuilder不会被NUnit测试框架自动调用,该逻辑中的配置规则没有实际用到。
解决方法
你可以选择任意一种适配你的业务需求的方案:
方案1:保留现有配置结构,修改读取逻辑
完善BaseTest中的配置构建代码,显式指定配置文件路径,同时按层级读取配置:
protected IConfiguration _config; public BaseTest() { _config = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) // 指定配置文件的输出目录为根路径 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); // 用冒号分隔嵌套节点读取配置 baseUrl = _config["Development:urlName"]; }
方案2:简化配置结构,适配原有读取逻辑
如果你不需要多环境配置区分,可以直接把urlName提到配置根节点,修改appsettings.json内容如下:
{ "urlName": "https://dev.website.com" }
修改后你原有_config["urlName"]的读取代码可以直接生效,只需在配置构建时加上基础路径即可:
_config = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); baseUrl = _config["urlName"];
可选优化
如果需要支持多环境配置切换,可以补充环境变量判断,加载对应环境的配置文件:
protected IConfiguration _config; public BaseTest() { // 读取环境变量,默认使用开发环境 var env = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Development"; _config = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env}.json", optional: true) .AddEnvironmentVariables() .Build(); baseUrl = _config["urlName"]; }
此时你可以把不同环境的配置拆分到appsettings.Development.json、appsettings.Test.json等独立文件中,统一管理配置。
如果你不需要使用.NET通用主机的依赖注入、托管服务等能力,Program.cs中的
CreateHostBuilder相关代码可以直接删除,不会影响配置读取逻辑。
内容的提问来源于stack exchange,提问作者getCritical
相关产品推荐
相关产品推荐

