C# 模拟IConfigurationSection以返回字符串数组

C# 模拟IConfigurationSection以返回字符串数组,c#,unit-testing,asp.net-core,configuration,moq,C#,Unit Testing,Asp.net Core,Configuration,Moq,使用answer模拟ASP.NET核心应用程序中的IConfiguration方法 我需要模拟IConfigurationSection以返回字符串数组 我的配置类如下所示: 公共类日志配置 { 公共字符串ApplicationName{get;set;} 公共字符串[]记录器{get;set;} } appsettings.json { "Logging": { "LoggingConfiguration": {

使用answer模拟ASP.NET核心应用程序中的IConfiguration方法

我需要模拟IConfigurationSection以返回字符串数组

我的配置类如下所示:

公共类日志配置 { 公共字符串ApplicationName{get;set;} 公共字符串[]记录器{get;set;} } appsettings.json

{
    "Logging": {
        "LoggingConfiguration": {
              "ApplicationName": "Some app",
              "Loggers":  [ "DiskLogger", "MemoryLogger"],
              "DiskLogger": {
                  "SomeSettingOne" : "setting",
                  "SomeSettingTwo" : "setting",
               },
              "MemoryLogger": {
                  "AnotherSetting": "...",
               }
       }
在设置模拟时,我有两个问题

我不知道如何模拟将返回字符串[]记录器的IConfigurationSection 当我试图在LoggingSectionMock上设置GetChildren方法时,我遇到了一个异常 公共空间设置 { var applicationNameConfigurationSectionMock=新建Mock; applicationNameConfigurationSectionMock.Setupm=>m.Value.ReturnsTestingApplicationName; var loggerNamesConfigurationSectionMock=新建Mock; loggerNamesConfigurationSectionMock.Setupm=>m.GetChildren.ReturnsGetLoggerNamesSection; //未找到引发方法异常 LoggingSectionMock.Setupm=>m.GetChildren.Returnsnew列表 {applicationNameConfigurationSectionMock.Object,LoggerNameConfigurationSectionMock.Object}; ConfigurationMock.Setupm=>m.GetSection${Logging}:{LoggingConfiguration} .Returns=>LoggingSectionMock.Object; } 私有IEnumerable GetLoggerNameSection { var loggerNamesConfigurationSections=新列表; LoggerNames.ToList.ForEachloggerName=> { var configSectionMock=新模拟; configSectionMock.Setupm=>m.Value.ReturnsLogger名称; loggerNamesConfigurationSections.AddconfigSectionMock.Object; }; 返回loggerNamesConfigurationSections; }
作为替代方案,您可以利用ConfigurationBuilder的AddInMemoryCollection:

参考文献

安装程序 IConfiguration configRoot=新配置生成器 .AddInMemoryCollection新词典 { {ApplicationName,App}, {记录器:0,1}, {伐木工人:1,2}, {伐木工人:2,3} } 建筑 用法 LoggingConfiguration=configRoot.Get;
作为替代方案,您可以利用ConfigurationBuilder的AddInMemoryCollection:

参考文献

安装程序 IConfiguration configRoot=新配置生成器 .AddInMemoryCollection新词典 { {ApplicationName,App}, {记录器:0,1}, {伐木工人:1,2}, {伐木工人:2,3} } 建筑 用法 LoggingConfiguration=configRoot.Get;
使用内存中的数据构建实际的IConfiguration。太多的努力去尝试和嘲笑这些。展示你真正想要测试的东西。这可能是一个错误。请与我们分享LoggingSectionMock和ConfigurationMock变量的定义好吗?另外,请与我们共享异常的详细信息。使用内存中的数据构建实际的IConfiguration。太多的努力去尝试和嘲笑这些。展示你真正想要测试的东西。这可能是一个错误。请与我们分享LoggingSectionMock和ConfigurationMock变量的定义好吗?另外,请与我们分享例外情况的详细信息。是的。这正是我所指的。回答得好。我喜欢这种方法——但我的appsettings.json更复杂。我已经更新了我的问题以显示appsettings.json结构。我需要获取文件的LoggingConfiguration部分。我想我找到了。是的。这正是我所指的。回答得好。我喜欢这种方法——但我的appsettings.json更复杂。我已经更新了我的问题以显示appsettings.json结构。我需要获取文件的LoggingConfiguration部分。我想我找到了。