Как проверить CacheProvider - PullRequest
0 голосов
/ 02 июля 2018

У меня есть класс Cache следующим образом:

public class MyCache : ICacheProvider
{ 
    private readonly IMemoryCache _cache; 
    private readonly MemoryCacheOptions _options;
    private readonly ILogger<InMemoryCacheProvider> _logger;  

    public MyCache(IMemoryCache cache, MemoryCacheOptions options, ILogger<InMemoryCacheProvider> logger)
    {
      //Elided
    }

    public virtual void Set<T>(string key, T value, TimeSpan expiration) where T : class
    {  
        _cache.Set(key, value, expiration); 
    } 

    public virtual T Get<T>(string key) where T : class
    { 
        if (_cache.Get(key) is T result)
        { 
            return result; 
        }  
        return default(T);
    } 
    // removed some code for clarity
 }

ICacheProvider имеет такие методы, как Set и Get.

Ну, как я могу проверить этот класс? Мне нужно проверить, что метод set на самом деле устанавливает что-то в зависимость. С FakeitEasy я сделал следующее:

    [Fact]
    public void SetTest()
    {
        var cache = A.Fake<MyCache>();
        var item = A.Fake<TestClass>();
        cache.Set("item", item);

        A.CallTo(() => cache.Set("item", item)).MustHaveHappened(); 
    }

Но это не имело для меня большого смысла.

Что меня интересует, так это то, что когда я вызываю метод set, мне нужно иметь возможность проверить, действительно ли установлен объект в поддельном кеше или что-то в этом роде. То же самое для Get и других методов.

Не могли бы вы уточнить?

1 Ответ

0 голосов
/ 02 июля 2018

@ Комментарий Нкоси правильный. Фреймворк для насмешек используется для насмешки над тестируемыми сотрудниками. Затем тестируемая система может быть задействована. Как это:

// mock a collaborator
var fakeCache = A.Fake<IMemoryCache>();

// Create a real system under test, using the fake collaborator.
// Depending on your circumstances, you might want real options and logger,
// or fake options and logger. For this example, it doesn't matter.
var myCacheProvider = new MyCache(fakeCache, optionsFromSomewhere, loggerFromSomewhere);

// exercise the system under test
myCacheProvider.Set("item", item, someExpriation);

// use the fake collaborator to verify that the system under test worked
// As @Nkosi points out, _cache.Set(key, value, expiration)
// from the question is an extension method, so you can't assert on it
// directly. Otherwise you could do
// A.CallTo(() => fakeCache.Set("item", item, expiration)).MustHaveHappened();
// Instead you'll need to assert on CreateEntry, which could be a little trickier
...