C# 单元测试中的HostBuilder:HostContext.Configuration.GetSection返回值null

C# 单元测试中的HostBuilder:HostContext.Configuration.GetSection返回值null,c#,.net-core,C#,.net Core,我正试图以以下方式在MsTest测试用例中使用HostBuilder类: [TestMethod] public void SomeTest() { var builder = new HostBuilder() .ConfigureAppConfiguration((hostingContext, config) => {

我正试图以以下方式在MsTest测试用例中使用HostBuilder类:

        [TestMethod]
        public  void SomeTest()
        {
            var builder = new HostBuilder()
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                })
                .ConfigureServices((hostContext, services) =>
                {
                    var section = hostContext.Configuration.GetSection("AppConfig");
                    Assert.IsNotNull(section.Value, "Appconfig sections was not loaded");
                });
            var host = builder.Build();
        }
因此,我有一个appsettings.json文件,它被添加到config对象中

问题:调用hostContext.Configuration.GetSectionAppConfig section.Value为null时,启动了断言。如果我调试代码,我可以看到hostContext.Configuration有一个JsonConfigurationProvider,它解析了appsettings.json中定义的适当值

环境:netcoreapp3.1

更新1:我已经把源代码上传到了

任何帮助都将不胜感激


Thx。

不确定您是否能够解决此问题,但我也遇到了类似的问题!我之所以能够解决这个问题,是因为在检查appsettings.json属性时,该文件的默认操作似乎从未被删除。因此,在目标文件夹中构建项目时,从未复制appsettings.json文件。将此设置更改为“始终复制”或“更新时复制”解决了此问题,现在我在目标执行文件夹中获得了更新的json文件

你上面的代码似乎很好——我的代码非常相似

要测试这是否确实是您的问题,请更改

config.AddJsonFile("appsettings.json", optional: true);

如果文件不存在,这将强制应用程序失败。这也是我在经历了令人尴尬的长时间之后发现问题的原因


要检查此文件的属性,请在解决方案资源管理器中右键单击该文件,然后选择“属性”。在默认的VS 2019中,属性面板位于解决方案资源管理器的正下方。

在我的例子中,我是从cmd实例运行应用程序的,因此基本上它是一个不同的工作目录,因此无法找到appsettings.json。有帮助的是首先将cding插入目录

我使用此选项始终从基本目录加载配置,如果缺少,则抛出:

.ConfigureAppConfiguration((hostingContext, config) =>
{
    config.SetBasePath(AppContext.BaseDirectory);
    config.Sources
        .OfType<Microsoft.Extensions.Configuration.Json.JsonConfigurationSource>()
        .Where(x => x.Path == "appsettings.json")
        .ForEach(x => x.Optional = false);
})

测试项目中是否有appsettings.json文件?确保在appsettings.json的文件属性中,选择Copy if newer或Copy always。是的,它在项目中,否则“AddJsonFile”将引发异常。同时复制。
.ConfigureAppConfiguration((hostingContext, config) =>
{
    config.SetBasePath(AppContext.BaseDirectory);
    config.Sources
        .OfType<Microsoft.Extensions.Configuration.Json.JsonConfigurationSource>()
        .Where(x => x.Path == "appsettings.json")
        .ForEach(x => x.Optional = false);
})