Насмешливый вызов метода в общем - PullRequest
5 голосов
/ 22 сентября 2011

Предположим, у меня есть строго типизированный интерфейс кеширования, который я хочу смоделировать. Он берет объекты любого вида и возвращает их, например:

interface IMyCache
{
   void Add( int key, object obj );
   T Get<T>(int key);
}

Могу ли я написать заглушку RhinoMocks, которая будет высмеивать любой тип параметра, который я отправляю? В идеале это будет выглядеть примерно так:

var mock = MockRepository.GenerateStub<IMyCache>();
mock.Stub( m => m.Get<T>(1234)).Return( new T());

Это не работает, потому что он ожидает, что T будет конкретным классом, но я бы хотел обобщить его. Это возможно?

1 Ответ

3 голосов
/ 22 сентября 2011

Не думаю, что ты можешь. При написании тестов с использованием носителей rhino вам нужно следовать правилам компилятора, и если вы не укажете универсальный тип T, это сделает компилятор несчастным.

Если вам нужно повторно использовать этот код-заглушку между несколькими тестами, каждый из которых использует разные типы для T, вы можете создать вспомогательный метод, как предлагается здесь: Rhino Mocks: как заглушить универсальный метод для перехвата анонимного типа

...