c# - Moq的It.IsAny<T>()是如何实现的

标签 c# moq

对于 C# 的 Moq,我通过调试器进入,并注意到 It.IsAny<T>()只是编译到某个值 T , 比如 Guid.Empty对于 Guid s, 0 表示 int

最小起订量如何区分 It.IsAny<T>以及它编译成的值?

最佳答案

GitHub source code为基地, 真正被匹配的是类型为 Predicate<T> 的给定谓词(或 Func<T, bool> 如果您愿意):

value => value == null || typeof(TValue).IsAssignableFrom(value.GetType())

它检查 value为空,或者如果 valueTValue 的类型相同IsAny<TValue> 的参数使用 Type.IsAssignableFrom .

然后返回 default(T) 允许模拟方法正确匹配签名的类型的值。正如 DavidH 所指出的,您不能将 null 用于值类型,这就是为什么首选使用 default(T) 作为通用返回值。

关于c# - Moq的It.IsAny<T>()是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037716/

相关文章:

c# - 如何捕获 Action<T> 中的异常或包含 C# 中的匿名方法的异常?

c# - 调用了单元测试 ThrowIfCancellationRequested()

c# - 使用模拟存储库对象测试服务

c# - 当用户已经登录时,如何重定向到未授权页面而不是登录页面?

c# - Json.Net 和 Monotouch 编译

c# - 在 GDI+ 中调整大小时出现 Ghost-borders ('ringing' )

c# - moqing整个Context时如何关联DBSets?

c# - 如何使用 Moq 模拟 Web 服务调用?

c# - Moq 和反射,将动态生成的表达式树/lambda 传递给 moq

c# - MS graph API Oauth2PermissionGrants 无法授予角色