2010-07-21 1 views
3

Могу ли я настроить макет объекта, чтобы всегда возвращать объект, заданный в качестве параметра? У меня есть методМогу ли я настроить макет, чтобы всегда возвращать объект, указанный в одном из аргументов?

public MyObject DoSomething(MyObject obj) 

, и я хочу, чтобы иметь макет, который всегда возвращает OBJ для каждого вызова DoSomething, вроде этого:

mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).Return(Arg<MyObject>) 

хотя я не уверен, что ставить в обратном биту ...

EDIT: Я попытался это:

MyObject o=null; 
mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).WhenCalled (y=> 
{ 
    o = y.Arguments[0] as MyObject; 
}).Return (o); 

, который, казалось, что это может быть обещаю, но не повезло. Проводка его в случае, если она пробежки кого-то память ...

ответ

7

Это должно делать то, что вы ищете:

mock.Stub(x => x.DoSomething(null)) 
    .IgnoreArguments() 
    .WhenCalled(x => 
        { 
         x.ReturnValue = (MyObject) x.Arguments[0]; 
        }) 
    .Return(null) 
    .TentativeReturn(); 

В основном я использую WhenCalled переопределить значение по умолчанию возврата в нуль (который я помечено как предварительное значение) со значением параметра, который был передан в DoSomething.

+0

фантастика! спасибо, я знал, что это возможно. –

+0

Что такое .TentativeReturn() do? – Grzenio

+0

Без проблем, Сэм. Было здорово разобраться. @Grzenio: TentativeReturn просто обозначает возвращаемое значение как переопределяемое. Вышеупомянутый код возвращает null, если вы его удалите. (WhenCalled все равно будет выполняться, но новое возвращаемое значение не будет выполнено) –

1

Более простой способ:

var mock = MockRepository.GenerateStub<IFoo>(); 
mock.Expect(m => m.Bar()) 
    .Return("Result goes here") 
    .Repeat.Any(); 
Смежные вопросы