You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:48:03