C# 如何模拟 Configuration.GetSection("foo:bar").Get<List<string>>(

编程入门 行业动态 更新时间:2024-10-25 03:29:49
本文介绍了C# 如何模拟 Configuration.GetSection("foo:bar").Get<List<string>>()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在 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 更复杂的场景感兴趣,阅读此类可能会有所帮助:github/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: github/aspnet/Extensions/blob/release/2.1/src/Configuration/Config.Binder/src/ConfigurationBinder.cs

更多推荐

C# 如何模拟 Configuration.GetSection("foo:bar").Get&lt;List&lt;str

本文发布于:2023-11-14 19:13:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1588299.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:foo   bar   quot   Configuration   GetSection

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!