对于 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
为空,或者如果 value
与 TValue
的类型相同IsAny<TValue>
的参数使用 Type.IsAssignableFrom .
然后返回 default(T)
允许模拟方法正确匹配签名的类型的值。正如 DavidH 所指出的,您不能将 null 用于值类型,这就是为什么首选使用 default(T) 作为通用返回值。
关于c# - Moq的It.IsAny<T>()是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037716/