Я пытаюсь высмеять функцию с именем GetOrAddAsync. Он определяется как:Moq и Async fun с помощью LazyCache
Task<T> GetOrAddAsync<T>(string key, Func<Task<T>> addItemFactory, DateTimeOffset expires);
Когда я использую его в моем фактическом коде я использую это нравится:
DateTimeOffset cacheTimeout = new DateTimeOffset(DateTime.Now.AddHours(config.CacheHours));
Func<Task<IEnumerable<int>>> func = async() => await (from s in dbContext.Names select s.First).ToListAsync();
return await cache.GetOrAddAsync(key, func, cacheTimeout);
Так в основном, если ключ существует, то он будет возвращать то, что в нем, и если не она будет создавать ключ и заполнить его данными, возвращаемыми из переданного в Func <>.
Моя насмешливый попытка этого до сих пор выглядит следующим образом:
cache.Setup(x => x.GetOrAddAsync(It.IsAny<string>(), It.IsAny<Func<Task<IEnumerable<int>>>>(), It.IsAny<DateTimeOffset>()))
.ReturnsAsync(async (string key, Func<Task<IEnumerable<int>>> func, DateTimeOffset policy) =>
{
return await func.Invoke();
});
Однако это возвращает ошибку:
Невозможно преобразовать лямбда-выражения к типу «IEnumerable», потому что это не тип делегата ,
Мой ум готов взорваться с этим синтаксисом :)
Я был так близок :). Спасибо, что сработало! – user441521