|
From: Heiko H. <rdr...@gm...> - 2007-09-11 14:06:58
|
Hello...
Lets ignore the more complicated event code for a second, and get to the "real problem" 1st...
IDbObject foo = _mocks.NewMock<IDbObject>();
Stub.On(foo).SetProperty("Id");
Expect.Once.On(foo).SetProperty("Id");
foo.Id = 123;
_mocks.Verify.......;
Say i have an Interface I want to mock. I know during my tests of another class, there will be a buch of (generally unimportant)
method calls that must be "stub"ed so the test in general can run...
But the stubs are not important, they just need to be there..
Example i supply a ILog mock which only has a method "Log"
Now in most tests i dont care what will be logged... But on some i need to make sure the right message is passed into the logger...
Now i need to override the Log stub and supply an expect.once with a certain message... now the logger interface might be simple... But if you do the same to a fairly complex view, then you need to stub all events etc so the test can work.
So back to the logger... My expection wont be fullfilled if i have defined a stub before the expection. the stub definition will swallow all calls to Log() and the expection will never catch the "crutial" Log("SH..!!! better call someone NOW!")
The exections and stubs have not been setup within an
using (mocks.Ordered)
{}
block, so i think the expections should have a higher priority priority then the stubs... After all there is a way to define a strict order.
I can post a full version of my event code if that is still requiered. But I dont want to go into a to much detail, since I see the problem as a more general one. I do have a workaround that works with my event code, but i think its a hack ;)
-------- Original-Nachricht --------
> Datum: Tue, 11 Sep 2007 07:58:06 -0500
> Von: "Steve Mitcham" <Ste...@ty...>
> An: "NMock2 Development Discussion" <nmo...@li...>
> Betreff: Re: [NMock2-Dev] Feature Request: "Stub" should have a lower prioritythen "Expect"
> Can you give a more complete example of what you are trying to accomplish?
> In your sample, you could use Expect.AtLeastOnce as the expectation to
> achieve the same effect.
>
> I'm also not following your event code example. It appears that you are
> only exercising the mocked view and nothing of a controller class is apparent
> in your sample. You need to give a better example here as well for me to
> determine what it is you are trying to accomplish.
>
> I will say that in the current code drop there is some new event handling
> code that may suit your needs, so you can write the following (the sample
> is from the acceptance test)
>
> listenerMessage = null;
> Mockery mocks = new Mockery();
> Announcer announcer = (Announcer) mocks.NewMock(typeof(Announcer));
>
> Expect.Once.On(announcer).EventAdd("Listeners", Is.Anything);
>
> announcer.Listeners += new Listener(DummyListener);
>
> Fire.Event("Listeners").On(announcer).With("Test Message");
>
> This might help to serve your purpose.
>
> -----Original Message-----
> From: nmo...@li...
> [mailto:nmo...@li...] On Behalf Of Heiko Hatzfeld
> Sent: Tuesday, September 11, 2007 6:09 AM
> To: nmo...@li...
> Subject: [NMock2-Dev] Feature Request: "Stub" should have a lower
> prioritythen "Expect"
>
> Hello...
>
> This is my first post and I already got some complains.. I know its a
> great start, but here we go...
>
> Giving this code:
>
>
> IDbObject foo = _mocks.NewMock<IDbObject>();
> Stub.On(foo).SetProperty("Id");
> Expect.Once.On(foo).SetProperty("Id");
> foo.Id = 123;
> _mocks.Verify.......;
>
> It will generate an exception. The reason is that the above code will not
> satisfy my expection, since the stub which was defined 1st, will catch the
> assignment and so the expection will never be reached.
>
> I think that an expection is much more important then a stub (Which is
> kinda a "Fallback" only).
>
> For example... I want to test a controller for a view, and Verify that the
> events are propperly setup and processed...
>
> I cannot create an implicit setup for the view (which creates the view and
> stubs all events), and then attach a real expection onto the view, that
> will allow me to sneak a mockEvent in, so i can fire it from the outside, and
> verify that the controler does its work.
>
> I currently need to declare an implicit setup, which defines expections,
> since those can be removed by adding a "fake" Handler on the Mock e.g.:
>
> //Inside CreateViewAndSetupBasicEvents Function
> Expect.Once.On(mockedView).EventAdd("Save", Is.Anything);
>
> //Inside my "real" test function...
> mockedView.Save += null;
> Expect.Once.On(mockedView).EventAdd("Save", Is.Anything)
> .Will(MockEvent.Hookup(mockevent));
> mockEvent.Raise();
>
>
> Hope this makes sense....
>
> I know i could "fix" it, by creating the view 1st and then adding the
> expections, and THEN finally adding all the stubs... But i kinda got attached
> to my setup functions so i can create and setup a basic mock with one
> call... Without that I would have to move the creation of the mock around, and I
> feel like i am "loosing" some clarity in my test, if I move to much into
> the "general" setup method.
>
>
> --
> Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
> Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> NMock-two-dev mailing list
> NMo...@li...
> https://lists.sourceforge.net/lists/listinfo/nmock-two-dev
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> NMock-two-dev mailing list
> NMo...@li...
> https://lists.sourceforge.net/lists/listinfo/nmock-two-dev
--
Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten
Browser-Versionen downloaden: http://www.gmx.net/de/go/browser
|