RhinoMocks - заглушка метод, который возвращает параметр
Я использую RhinoMocks, мне нужно заглушить метод, и он всегда должен возвращать третий параметр, независимо от того, что передается в:
_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3);
Очевидно, это не так просто. Я не всегда знаю, какими будут пармы, но я знаю, что всегда хочу вернуть третий.
3 ответа
Решение
Вы можете предоставить реализацию метода с помощью обработчика Do():
Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z;
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird);
Обратите внимание, что TypeZ
появляется дважды, потому что это и тип входного аргумента, и тип возвращаемого значения.
Это сработало для меня:
_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];
});
Вы можете использовать ожидаемый метод с обратным вызовом, чтобы вернуть значение, которое вы ищете. Следующий вернет ноль.
_service.Expect(o => o.Method(null, null, null))
.Callback((object parm1, object parm2, object parm3) => { return parm3; });
Я не уверен, что вы можете использовать Callback на Stub.