2009-11-12 5 views
36

Я использую RhinoMocks, мне нужно окурок метода, и всегда он возвращает третий параметр, независимо от того, что передается в:RhinoMocks - окурок, метод, который возвращает параметр

_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3); 

Очевидно, что это это не так просто. Я не всегда знаю, что будет за парм, но я знаю, что всегда хочу вернуть третий.

+0

Я не уверен, если это возможно. Не могли бы вы отправить метод, который вы пытаетесь проверить? –

+0

Метод возвращает вызов другого метода из статического класса. В основном вызов выглядит в базе данных, чтобы увидеть, присутствует ли первый параметр, если нет, он возвращает третий параметр. – Martin

+0

Это кусок пирога с моком –

ответ

65

Вы можете обеспечить реализацию для метода с Do() handler:

Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z; 
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird); 

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

+2

Удивительный, это сработало отлично. – Martin

+1

Используется '.Expect()' вместо '.Stub()' как в вопросе. – ANeves

0

Вы можете использовать метод ожидания с обратным вызовом, чтобы вернуть значение, которое вы после. Следующее возвращает null.

_service.Expect(o => o.Method(null, null, null)) 
     .Callback((object parm1, object parm2, object parm3) => { return parm3; }); 

Я не уверен, что вы можете использовать обратный вызов на заглушке.

6

Это работает для меня:

 _service 
      .Stub(x => x.Method(Arg<string>.Is.Anything, ...)) 
      .Return(null) // ... or default(T): will be ignored but RhinoMock requires it 
      .WhenCalled(x => 
      { 
       // This will be used as the return value 
       x.ReturnValue = (string) x.Arguments[0]; 
      }); 
Смежные вопросы