Вы не можете смоделировать статические методы, и поэтому все методы LINQ не являются (легкими) поддельными (на самом деле это возможно из-за упорядочения пространств имен и того, какой метод расширения будет выбран), но это не то, что вам нравитсяdo.
Вместо этого вы должны создать экземпляр (независимо от того, поддельный или действительный), который предоставляет требуемые данные, и добавить их в методы, которые вы хотите проверить.
В случае IConfiguration
здесь даже издеваться не нужно.Вы можете использовать существующую реализацию, которая предоставляет требуемые данные.
Так что для вашего случая я бы использовал следующую:
[Fact]
public void ConfigurationContainsSupportedVersions()
{
var config = CreateConfiguration();
var items = config.GetSection($"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions").Get<List<string>>();
Assert.Equal(7, items.Count);
}
private static IConfiguration CreateConfiguration()
{
return new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string>
{
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:0", "Android 5" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:1", "Android 6" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:2", "Darwin Kernel Version 15" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:3", "Darwin Kernel Version 16" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:4", "Windows 10" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:5", "Windows 6.2" },
{ $"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:6", "Windows 6.3" },
})
.Build();
}
Этот экземпляр config
может быть перенаправлен любому методу, которыйпотребляет IConfiguration и выдает желаемый результат, который вам нравится.