C# 单元测试中的HostBuilder:HostContext.Configuration.GetSection返回值null
我正试图以以下方式在MsTest测试用例中使用HostBuilder类: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) => {
[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);
})