oh, I figured it out; I forgot to make the Appointment property
"virtual".


On Feb 12, 10:49 am, Claudio Lassala <[email protected]> wrote:
> I thought of stubbing the SUT because I don't want any logic to run on
> either setter or getter of that Appointment property. I tried to mock
> the viewmodel, but that yields the same error.
>
> this is a ViewModel for a WPF app. SaveCommand is an ICommand, and
> WPF's databinding is being used here to bind a UI control to that
> Command property. I call SaveCommand.Execute(null) because that's what
> WPF is going to call when the user presses the button that's bound to
> that command.
>
> SaveCommand calls a private OnSave command on the viewmodel, that does
> the following:
>
>         void OnSave(object parm)
>         {
>             m_DataService.SaveAppointment(Appointment);
>             m_Controller.EditComplete(this);
>         }
>
> so the test is checking to make sure the current appointment gets
> saved when the SaveCommand is invoked.
>
> So you know, the code under test here comes from a magazine article on
> Prism. In order to dig more into Rhino Mocks, I've decided to grab
> that sample code and write tests for it. Of course, since that's
> sample code, I'm having to refactor things there (for instance,
> passing interfaces around, instead of concrete types, and things like
> that). I'm definitely taking any suggestions to improve this.  :)
>
> Thanks!
>
> On Feb 12, 1:50 am, chrissie1 <[email protected]> wrote:
>
> > Why are you stubbing the viewmodel? I would never stub the SUT just
> > the dependencies.
>
> > I guess you need the appointment because the savecommand saves that.
> > Perhaps you need to make your code more testable. Why are you calling
> > savecommand.execute(null) (which seems a violation against the law of
> > demeter) why not straight ds.SaveAppointment(Appointment)? Or just
> > plain SaveAppointment.
>
> > To solve the problem as is I would make viewmodel a mock and not a
> > stub.
>
> > On Feb 12, 6:22 am, Claudio Lassala <[email protected]> wrote:
>
> > > Hi all,
>
> > > I have the following test:
>
> > >         [TestMethod]
> > >         public void Save_command_should_save_current_appointment()
> > >         {
> > >             var view =
> > > MockRepository.GenerateStub<IAppointmentEditView>();
> > >             var editingController =
> > > MockRepository.GenerateStub<IEditingController>();
> > >             var dataService =
> > > MockRepository.GenerateMock<IAppointmentDataService>();
> > >             var viewModel =
> > > MockRepository.GenerateStub<AppointmentEditViewModel>(view,
> > > editingController, dataService);
>
> > >             var appointment = new AppointmentItem();
> > >             viewModel.Appointment = appointment;
>
> > >             viewModel.SaveCommand.Execute(null);
>
> > >             dataService.AssertWasCalled(ds => ds.SaveAppointment(Arg.Is
> > > (appointment)));
> > >         }
>
> > > the test passes, but there's one thing that bothers me: I want to stub
> > > out the viewModel.Appointment property, because its setter has some
> > > logic that I don't want to run in this test. I tried doing something
> > > like this:
>
> > > viewModel.Stub(x => x.Appointment).Return(appointment);
>
> > > but then my test fail at that line, with the following error:
>
> > > "This action is invalid when the mock object is in replay state."
>
> > > Am I missing something there?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino.Mocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/RhinoMocks?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to