Я столкнулся с той же проблемой и обнаружил, что мне нужно было создать фиктивную IConfigurationSection для каждого элемента в массиве, а также сам узел массива, а затем настроить родительский узел, чтобы он возвращал потомков, и потомок, чтобы они возвращали свои значения. , В примере с OP это будет выглядеть так:
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);
P.S. Я использую Moq, поэтому, пожалуйста, переведите вашу любимую библиотеку на ваш выбор.
P.P.S. Если вас интересует, почему это работает, что делает немодируемый метод Get () или у вас более сложный сценарий, чем OP, чтение этого класса может быть полезно: https://github.com/aspnet/Extensions/blob/release/2.1/src/Configuration/Config.Binder/src/ConfigurationBinder.cs