Как использовать методы расширения Linq - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать объект, в котором он будет востребован в моем тестовом классе.Я не мог этого сделать, потому что в настоящее время moq не использует moq статические методы.

    var mockConfiguration = new Mock<IConfiguration>();
    mockConfiguration.Setup(f => f.AsEnumerable()
                                      .Where(kvp => kvp.Key.StartsWith($"CheckerConfigurations:{nameof(OSVersionChecker)}:SupportedVersions:") && kvp.Value != null)
                                      .Select(kvp => kvp.Value)).Returns(new List<string>() {
                                          "Android 5",
                                          "Android 6",
                                          "Darwin Kernel Version 15",
                                          "Darwin Kernel Version 16",
                                          "Windows 10",
                                          "Windows 6.2",
                                          "Windows 6.3"
                                      }.AsEnumerable());

Может кто-нибудь показать мне, как это сделать, пожалуйста?

1 Ответ

0 голосов
/ 22 октября 2018

Вы не можете смоделировать статические методы, и поэтому все методы 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 и выдает желаемый результат, который вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...