为什么所有对象都在智能感知中列出 Rhino 存根方法?
Why are all objects listing Rhino stub methods in intellisense?
我注意到有点恼人的是,每个对象(不是只是存根对象)都列出了所有常见的 Rhino 方法,例如 Visual Studio 中的 AssertNeverCalled。它使浏览 properties/methods 变得更加困难。
这是 Visual Studio 的错误(例如损坏的 Intellisense DB)还是 'feature' Rhino Mocks 的错误?
为了回答你的问题,我需要在 arrange 和 asserts 方法之间拆分我的答案。
您在引用类型实例上遇到这些扩展方法的原因是因为 VS IntelliSense 无论如何都不支持过滤这些方法:
public static IMethodOptions<object> Stub<T>(this T mock, Action<T> action) where T : class
正如您在上面的 stub
方法签名中看到的,对 T
类型的唯一约束是; T
必须是引用类型。
这就是 IntelliSense 在您的示例中不为您提供 stub
方法的原因(DateTime
是结构...)
所以 IntelliSense 为您提供引用类型排列方法的原因是:IntelliSense 限制 + Rhinomocks 设计(Moq 用 .Object
属性 解决了这个问题)。
为什么 IntelliSense 提供非引用类型的断言方法(你的例子...)?
这是一个 Rhinomocks 错误;基本上 Rhinomocks 不允许您生成非引用类型对象,并且对这些方法没有任何限制;
public static void AssertWasCalled<T>(this T mock, Action<T> action)
正如您在上面的签名中看到的,T
没有任何限制,这是您遇到的不一致行为(bug...)的根源
asserts 方法的引用类型应与 arrange 方法完全相同。
我注意到有点恼人的是,每个对象(不是只是存根对象)都列出了所有常见的 Rhino 方法,例如 Visual Studio 中的 AssertNeverCalled。它使浏览 properties/methods 变得更加困难。
这是 Visual Studio 的错误(例如损坏的 Intellisense DB)还是 'feature' Rhino Mocks 的错误?
为了回答你的问题,我需要在 arrange 和 asserts 方法之间拆分我的答案。
您在引用类型实例上遇到这些扩展方法的原因是因为 VS IntelliSense 无论如何都不支持过滤这些方法:
public static IMethodOptions<object> Stub<T>(this T mock, Action<T> action) where T : class
正如您在上面的 stub
方法签名中看到的,对 T
类型的唯一约束是; T
必须是引用类型。
这就是 IntelliSense 在您的示例中不为您提供 stub
方法的原因(DateTime
是结构...)
所以 IntelliSense 为您提供引用类型排列方法的原因是:IntelliSense 限制 + Rhinomocks 设计(Moq 用 .Object
属性 解决了这个问题)。
为什么 IntelliSense 提供非引用类型的断言方法(你的例子...)?
这是一个 Rhinomocks 错误;基本上 Rhinomocks 不允许您生成非引用类型对象,并且对这些方法没有任何限制;
public static void AssertWasCalled<T>(this T mock, Action<T> action)
正如您在上面的签名中看到的,T
没有任何限制,这是您遇到的不一致行为(bug...)的根源
asserts 方法的引用类型应与 arrange 方法完全相同。