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 |