C# how to mock Configuration.GetSection(quot;foo:barquot;).Getlt;Listlt;stringgt;gt;()(C# 如何模拟 Configuration.GetSection(foo:bar).Getlt;Listlt;stringgt;gt;())
问题描述
我在 config.json 文件中有一个如下列表`
I have a list like following in config.json file `
{
"foo": {
"bar": [
"1",
"2",
"3"
]
}
}`
我可以使用
Configuration.GetSection("foo:bar").Get<List<string>>()
我想模拟 configuration.GetSection
来编写单元测试.
I want to mock the configuration.GetSection
to write unit test.
以下语法失败
mockConfigRepo
.SetupGet(x => x.GetSection("reportLanguageSettings:reportLanguageList").Get<List<string>>())
.Returns(reportLanguages);
推荐答案
我遇到了同样的问题,发现我需要为数组中的每个元素以及数组节点本身创建一个mock IConfigurationSection,然后设置父节点返回子节点,子节点返回它们的值.在 OP 示例中,它看起来像这样:
I've encountered same issue and found that I needed to create a mock IConfigurationSection for every element in the array, as well as the array node itself, and then setup the parent node to return children, and children to return their values. In OP example, it would look like this:
var oneSectionMock = new Mock<IConfigurationSection>();
oneSectionMock.Setup(s => s.Value).Returns("1");
var twoSectionMock = new Mock<IConfigurationSection>();
twoSectionMock.Setup(s => s.Value).Returns("2");
var fooBarSectionMock = new Mock<IConfigurationSection>();
fooBarSectionMock.Setup(s => s.GetChildren()).Returns(new List<IConfigurationSection> { oneSectionMock.Object, twoSectionMock.Object });
_configurationMock.Setup(c => c.GetSection("foo:bar")).Returns(fooBarSectionMock.Object);
附:我使用的是 Moq,所以请翻译成您选择的模拟库.
P.S. I'm using Moq, so please translate to your mock library of choice.
附言如果您对为什么最终会起作用、不可修改的 Get() 方法的作用或有比 OP 更复杂的场景感兴趣,阅读此类可能会有所帮助:https://github.com/aspnet/Extensions/blob/release/2.1/src/Configuration/Config.Binder/src/ConfigurationBinder.cs
P.P.S. If you are interested in why this ends up working, what unmockable Get() method does, or have a more complex scenario than OP, reading this class may be helpful: https://github.com/aspnet/Extensions/blob/release/2.1/src/Configuration/Config.Binder/src/ConfigurationBinder.cs
这篇关于C# 如何模拟 Configuration.GetSection("foo:bar").Get<List<string>>()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C# 如何模拟 Configuration.GetSection("foo:bar")


基础教程推荐
- 在 VB6 或经典 ASP 中使用 .NET 2022-01-01
- 将数据集转换为列表 2022-01-01
- C# 9 新特性——record的相关总结 2023-04-03
- 重新排序 WPF TabControl 中的选项卡 2022-01-01
- 获取C#保存对话框的文件路径 2022-01-01
- SonarQube C# 分析失败“不是指针的有效行偏移" 2022-01-01
- 从 C# 控制相机设备 2022-01-01
- Mono https webrequest 失败并显示“身份验证或解密失败" 2022-01-01
- 更新 Visual Studio 中的 DataSet 结构以匹配新的 SQL 数据库结构 2022-01-01
- 如果条件可以为空 2022-01-01