Я пытаюсь высмеять IMemoryCache
с помощью Moq. Я получаю эту ошибку:
Исключение типа "System.NotSupportedException" произошло в Moq.dll, но не был обработан в коде пользователя
Дополнительная информация: выражение ссылается на метод, который не принадлежат обманутому объекту: x = > x.Get <String> (It.IsAny <String> ())
Мой издевательский код:
namespace Iag.Services.SupplierApiTests.Mocks
{
public static class MockMemoryCacheService
{
public static IMemoryCache GetMemoryCache()
{
Mock<IMemoryCache> mockMemoryCache = new Mock<IMemoryCache>();
mockMemoryCache.Setup(x => x.Get<string>(It.IsAny<string>())).Returns("");<---------- **ERROR**
return mockMemoryCache.Object;
}
}
}
Почему я получаю эту ошибку?
Это проверенный код:
var cachedResponse = _memoryCache.Get<String>(url);
Где _memoryCache
имеет тип IMemoryCache
Как я высмеиваю _memoryCache.Get<String>(url)
выше и пусть он возвращает null?
Изменить. Как бы я сделал то же самое, но для _memoryCache.Set<String>(url, response);
? Я не против, что он возвращает, мне просто нужно добавить метод к макету, чтобы он не бросался, когда он вызывается.
Идя по ответу на этот вопрос, я пробовал:
mockMemoryCache
.Setup(m => m.CreateEntry(It.IsAny<object>())).Returns(null as ICacheEntry);
Потому что в расширениях memoryCache он показывает, что он использует CreateEntry
внутри Set
. Но это ошибка из-за того, что "ссылка на объект не установлена на экземпляр объекта".