Как я могу изменить результат вызова метода для смоделированного объекта до его возвращения? - PullRequest
0 голосов
/ 24 февраля 2011

С учетом следующего упрощенного примера с использованием RhinoMocks и MSpec:

[Subject(typeof (LocationController))]
public class when_creating_a_location_with_invalid_model : context_for_location_controller
{
    static LocationModel model = new LocationModel();
    static SelectList states = new SelectList(new Dictionary<string,string> {
        { "IN", "Indiana" }, { "NY", "New York" }
    });

    static ActionResult result;

    Establish context = () =>
        {
            LocationModelBuilder.Stub(x =>
                x.Build(Arg<LocationModel>.Is.Equal(model))).Return(model);
        }

    Because of = () => result = subject.Create(model);

    It should_automatically_select_a_state = () => result.Model<LocationModel>()
         .States.ShouldNotBeEmpty();
}

Как изменить объект, содержащийся в переменной model , перед тем, как он будет возвращен из вызова-заглушки LocationModelBuilder.Build () ? Я хочу выполнить назначение как model.States = states непосредственно перед возвратом к Build () . Я пытался играть с обработчиком Do () , но я сдаюсь ...

1 Ответ

2 голосов
/ 24 февраля 2011

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

.WhenCalled(m => {
   Model model = (Model) m.Arguments[0];
   model.States = ...;
});
...