Модульное тестирование и IDistributedCache с использованием Azure Redis - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть работающая реализация Azure Redis и .Net Core 2 с использованием кода, очень похожего на то, что описано в этой статье

Мой вопрос заключается в том, как создать экземпляр экземпляракеш из юнит-теста класса?Я просмотрел несколько ресурсов и ничего не нашел.

Мне нужно иметь возможность создать экземпляр для создания экземпляра такого класса, как

    public CacheManager(IDataManager dataservices, IDistributedCache cache)
    {
        _cache = cache;
        _dataservices = dataservices;
    }

Код в файле startup.cs используетConfigureServices

            //Configure Redis Cache
        var redisconnection = Configuration.GetConnectionString("Redis");
        services.AddDistributedRedisCache(o => { o.Configuration = redisconnection; });

Может быть, мне нужно добавить пакет в проект модульного тестирования?Как это сделать?

1 Ответ

0 голосов
/ 14 сентября 2018

Можно просто смоделировать интерфейсы, чтобы они работали так, как нужно для изолированного модульного теста.

public void Test_CacheManager() {
    //Arrange
    IDataManager dataservices = new Mock<IDataManager>(); 
    IDistributedCache cache = new Mock<IDistributedCache>();
    var subject = new CacheManager(dataservices.Object, cache.Object);

    //Setup the mocks to behave as expected.

    //Act
    //...call the method under test

    //Assert
    //...assert the expected behavior
}

Приведенный выше пример использует Moq, чтобы продемонстрировать, как имитировать экземпляры зависимостей тестируемого класса.

Ссылка Moq Quickstart , чтобы лучше понять, как использовать библиотеку насмешек.

Если вы подключаетесь к фактическому соединению redis, то это больше не будет модульный тест, а интеграционный тест, который потребует совершенно другого подхода.

public void Test_CacheManager() {
    //Arrange

    IDataManager dataservices = new Mock<IDataManager>(); 
     //Setup the mocks to behave as expected.

    //Configure Redis Cache
    var services = new ServiceCollection();
    var redisconnection = "...";
    services.AddDistributedRedisCache(o => { o.Configuration = redisconnection; });
    var provider = services.BuildServiceProvider();
    IDistributedCache cache = provider.GetService<IDistributedCache>();

    var subject = new CacheManager(dataservices.Object, cache);

    //Act
    //...call the method under test

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