Как я могу имитировать фабрику асинхронного общего кэша с помощью Moq?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу имитировать фабрику асинхронного общего кэша с помощью Moq?

Сообщение Anonymous »

Я пытаюсь имитировать следующий метод службы кэширования с помощью Moq:

Код: Выделить всё

Task GetOrCreateAsync(string key, Func factory)
Метод обычно проверяет кэш на наличие записи и возвращает ее, а если не найден, создает новый экземпляр, вызывая фабрику. Я хочу создать макет, который просто вызывает фабрику и возвращает результат вызывающей стороне.
Вот минимальный воспроизводимый пример (LINQPad Instant Share):

Код: Выделить всё

var mock = new Mock();
mock.Setup(cache => cache.GetOrCreateAsync(It.IsAny(), It.IsAny()).Result)
.Returns((string b, Func c) => c().Result);

mock.Object.GetOrCreateAsync("test", () => Task.FromResult(123));

public interface ICache
{
Task GetOrCreateAsync(string key, Func factory);
}
Когда я запускаю вышеуказанное, я получаю InvalidCastException: невозможно привести объект типа «System.Threading.Tasks.Task'1[Moq.It+IsAnyType]» к введите 'System.Threading.Tasks.Task'1[System.Int32]'.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -using-moq
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»