带有泛型返回类型的 func 参数的泛型方法的最小起订量设置

问题描述 投票:0回答:1

我有一个通用方法,如下所示,

public interface IMemoryCacheWithPolicy
{
    TItem GetOrCreate<TItem>(object key, Func<TItem> createItem, CacheItemPriority priorityLevel);
}

我正在调用这样的方法,

var materials = _cacheProvider.GetOrCreate("ActiveMaterials",
    () => _materialService.GetMaterials(false), CacheItemPriority.Normal);

要对调用类进行单元测试,我如何设置IMemoryCacheWithPolicy的最小起订量,尝试了其他线程中提供的一些建议,但无法使其工作。 以下是我尝试过但没有成功的一些,

 _mockCacheProvider.Setup(
     x =>
         x.GetOrCreate("ActiveMaterials", It.IsAny<Func<IEnumerable<MaterialModel>>>(),
             It.IsAny<CacheItemPriority>())).Returns(_allMaterials);

 _mockCacheProvider.Setup(
     foo =>
         foo.GetOrCreate<IEnumerable<MaterialModel>>("ActiveMaterials",
             (Func<It.IsAnyType>)It.IsAny<object>(),
             It.IsAny<CacheItemPriority>())).Returns(_allMaterials);
c# .net unit-testing generics moq
1个回答
0
投票

让它可以使用以下设置,

 _mockCacheProvider.Setup(
 cs =>
     cs.GetOrCreate(It.Is<object>(k => k.ToString() == key),
         It.IsAny<Func<IEnumerable<MaterialModel>>>(),
         It.Is<CacheItemPriority>(p => p == CacheItemPriority.Normal))).Returns(
             (object k, Func<IEnumerable<MaterialModel>> createFunc,
                 CacheItemPriority p) => createFunc());
© www.soinside.com 2019 - 2024. All rights reserved.