通常模拟方法调用

Ben*_*ton 5 rhino-mocks mocking

假设我有一个强类型的缓存接口,我想模拟.它需要任何类型的对象并返回它们,如下所示:

interface IMyCache
{
   void Add( int key, object obj );
   T Get<T>(int key);
}
Run Code Online (Sandbox Code Playgroud)

我可以编写一个RhinoMocks存根,它将模拟我发送给它的任何参数类型吗?理想情况下,它看起来像这样:

var mock = MockRepository.GenerateStub<IMyCache>();
mock.Stub( m => m.Get<T>(1234)).Return( new T());
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它期望T是一个具体的类,但我想将它泛化.这可能吗?

Tho*_*dal 3

我认为你不能。当使用rhino模拟编写测试时,您需要遵循编译器的规则,并避免指定泛型类型T,这会让编译器不高兴。

如果您需要在多个测试之间重用该存根代码,每个测试使用不同的 T 类型,您可以按照此处建议的方式创建一个辅助方法:Rhino Mocks:如何存根通用方法来捕获匿名类型?