RhinoMocks - заглушка метод, который возвращает параметр - PullRequest
36 голосов
/ 12 ноября 2009

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

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

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

Ответы [ 3 ]

66 голосов
/ 13 ноября 2009

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

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

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

6 голосов
/ 04 марта 2015

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

        _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];
            });
0 голосов
/ 13 ноября 2009

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

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

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

...