为什么在intellisense中列出Rhino存根方法的所有对象?

时间:2016-05-20 13:54:11

标签: c# visual-studio unit-testing intellisense rhino-mocks

我注意到,有点烦人的是,每个对象(只是存根对象)都列出了所有常见的Rhino方法,如Visual Studio中的AssertNeverCalled。它使得浏览属性/方法变得更加困难。

enter image description here

这是Visual Studio的错误(例如,损坏的Intellisense数据库)还是一个'功能'犀牛嘲笑?

1 个答案:

答案 0 :(得分:2)

要回答你的问题,我需要在安排和断言方法之间分开我的答案。

您在引用类型实例上面对这些扩展方法的原因是因为VS IntelliSense不支持过滤这些方法:

public static IMethodOptions<object> Stub<T>(this T mock, Action<T> action) where T : class

正如您在上面的stub方法signeture中所看到的,T类型的唯一约束是; T必须是参考类型。

这就是为什么IntelliSense没有为您提供示例中stub方法的原因(DateTime是struct ...)

因此,IntelliSense为您提供引用类型的排列方法的原因是:IntelliSense限制+ Rhinomocks设计(Moq使用.Object属性解决了这个问题)。

为什么IntelliSense在非引用类型上提供断言方法(例如......)?

这是一个Rhinomocks的虫子; Basiclly Rhinomocks不允许您生成非引用类型对象,并且对这些方法没有约束;

public static void AssertWasCalled<T>(this T mock, Action<T> action)

正如您在上面的signeture中所看到的,T没有约束,这是您遇到的不一致行为(错误......)的来源

断言方法应该具有与排列方法完全相同的引用类型约束。