C# 模拟IConfigurationSection以返回字符串数组
使用answer模拟ASP.NET核心应用程序中的IConfiguration方法 我需要模拟IConfigurationSection以返回字符串数组 我的配置类如下所示: 公共类日志配置 { 公共字符串ApplicationName{get;set;} 公共字符串[]记录器{get;set;} } appsettings.jsonC# 模拟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": {
{
"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部分。我想我找到了。