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")


- WebMatrix WebSecurity PasswordSalt 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 输入按键事件处理程序 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01