You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何Mock并设置GetCache方法?编译错误修复求助

问题解决方法

编译错误原因

你的测试代码存在两个核心问题:

  1. 泛型参数缺失:实际业务代码调用的是泛型方法GetCache<IDictionary<Guid, DataExportRequestModel>>,但测试Setup时没有指定对应的泛型类型参数,Moq无法匹配正确的方法重载。
  2. 参数匹配逻辑问题:直接使用new TimeSpan(...)作为匹配参数时,Moq会默认按实例引用(值类型按严格值匹配)校验,若测试代码与业务代码中创建的TimeSpan实例存在细微差异(或编译器无法推断匹配逻辑),会导致编译或运行时匹配失败。

修正后的测试代码

// 指定泛型参数,同时使用Moq的参数匹配器来匹配TimeSpan值
_mockRediscacheProvider.Setup(x => x.GetCache<IDictionary<Guid, DataExportRequestModel>>(
    CacheName.Redis.ToString(), 
    It.Is<TimeSpan>(ts => ts.TotalDays == _cacheTTLDays)
));

简化匹配的可选方案

如果_cacheTTLDays是固定值(比如2),可以用更简洁的匹配方式:

_mockRediscacheProvider.Setup(x => x.GetCache<IDictionary<Guid, DataExportRequestModel>>(
    CacheName.Redis.ToString(), 
    It.IsEqualTo(TimeSpan.FromDays(_cacheTTLDays))
));

内容的提问来源于stack exchange,提问作者Rishikesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:01:14