|
From: Steve M. <Ste...@ty...> - 2007-09-11 14:32:47
|
It's not a matter of priority, the design philosophy is such that NMock =
is expecting either a Stub or an Expectation, but not both. Stub is =
just another expectation internally, so if it is first in the list it =
will match all comers.
I could see having an explicit =
Expect.Once.On(foo).ReplacingExistingExpectations.SetProperty("Id");
Which could find and clear all the existing expectations and replace it =
for that test case; however, I don't think I'd want to add in an =
implicit 'override' behavior between expectations.
That's my opinion of course, if anyone else wants to chime in on this, =
please do.
Nat, if you see this can you comment about the original nmock behavior =
for this case, were you able to set up a default and then override it =
for specific tests?
-----Original Message-----
From: nmo...@li... =
[mailto:nmo...@li...] On Behalf Of Heiko =
Hatzfeld
Sent: Tuesday, September 11, 2007 9:07 AM
To: NMock2 Development Discussion
Subject: Re: [NMock2-Dev] Feature Request: "Stub" should have alower =
prioritythen "Expect"
Hello...
Lets ignore the more complicated event code for a second, and get to the =
"real problem" 1st...
IDbObject foo =3D _mocks.NewMock<IDbObject>();
Stub.On(foo).SetProperty("Id");
Expect.Once.On(foo).SetProperty("Id");
foo.Id =3D 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...=20
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.=20
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=20
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.
>=20
> 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.
>=20
> 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)
>=20
> listenerMessage =3D null;
> Mockery mocks =3D new Mockery();
> Announcer announcer =3D (Announcer) =
mocks.NewMock(typeof(Announcer));
> =09
> Expect.Once.On(announcer).EventAdd("Listeners", Is.Anything);
> =09
> announcer.Listeners +=3D new Listener(DummyListener);
> =09
> Fire.Event("Listeners").On(announcer).With("Test Message");
>=20
> This might help to serve your purpose.
>=20
> -----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"
>=20
> Hello...
>=20
> This is my first post and I already got some complains.. I know its a
> great start, but here we go...
>=20
> Giving this code:
>=20
>=20
> IDbObject foo =3D _mocks.NewMock<IDbObject>();
> Stub.On(foo).SetProperty("Id");
> Expect.Once.On(foo).SetProperty("Id");
> foo.Id =3D 123;
> _mocks.Verify.......;
>=20
> 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.
>=20
> I think that an expection is much more important then a stub (Which is
> kinda a "Fallback" only).
>=20
> For example... I want to test a controller for a view, and Verify that =
the
> events are propperly setup and processed...
>=20
> 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.
>=20
> 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.:
>=20
> //Inside CreateViewAndSetupBasicEvents Function
> Expect.Once.On(mockedView).EventAdd("Save", Is.Anything);
>=20
> //Inside my "real" test function...
> mockedView.Save +=3D null;
> Expect.Once.On(mockedView).EventAdd("Save", Is.Anything)
> .Will(MockEvent.Hookup(mockevent));
> mockEvent.Raise();
>=20
>=20
> Hope this makes sense....
>=20
> 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.
>=20
>=20
> --=20
> Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!=20
> Ideal f=FCr Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
>=20
> =
-------------------------------------------------------------------------=
> 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
>=20
> =
-------------------------------------------------------------------------=
> 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
--=20
Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten=20
Browser-Versionen downloaden: http://www.gmx.net/de/go/browser
-------------------------------------------------------------------------=
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
|