I've just encountered the issue of having a test pass when a property on a dynamic mocked object is accessed more than once, when I have the LastCall.Repeat.Once() coded. That is, the method might go
MyThing x = obj.MyProp; MyThing y = obj.MyProp; I mock Expect.Call(myMock.MyProp).Return(dummyObj); LastCall.Repeat.Once(); I then expect my test to fail - I should have coded Repeat.Twice(). But it passes. Your link explains why - http://stackoverflow.com/questions/887245/rhino-mocks-repeat-once-not... This is my opinion as a beginner user. I find that confusing. The majority of users would want to use the Repeat method to actually specify the number of calls being made, and would want the test to fail unless they've specified the correct number. Repeat not being enforced with dynamic mocks and with partial mocks does not seem good functionality. I also don't find it the proposed solutions on the stackoverflow link a good workaround: why should there be any workaround at all? Just code the Repeat method to enforce the number of calls. Anything else is unnecessarily confusing to users of Rhino Mocks - and Stefan's mentioning that this is a common confusion indicates this. On Aug 17, 6:25 pm, Stefan Steinegger <[email protected]> wrote: > This is a common confusion. See this on stackoverflow: > > http://stackoverflow.com/questions/887245/rhino-mocks-repeat-once-not... > > On 12 Aug., 12:18, "Jake" <[email protected]> wrote: > > > > > You are not repeating a call, you are repeating expectation. On strict or > > dynamic mocks there is no implementation of the method, as such your second > > call will fail, whereas in dynamic mock second call will go thru. > > I agree that this unnecessary feature. > > Sent from my Verizon Wireless BlackBerry > > > -----Original Message----- > > From: Ben M <[email protected]> > > > Date: Tue, 11 Aug 2009 16:12:40 > > To: Rhino.Mocks<[email protected]> > > Subject: [RhinoMocks] Re: partial mock not correctly doing 'Repeat.Once()' > > > yes, but doesnt this sort of defeat the purpose of using Repeat.Once > > ()? > > > i mean if i'm using a strict or dynamic mock then i can use Repeat.Once > > () in this way, why then can i not do this w/ a partial? > > > On Aug 11, 4:08 pm, Ayende Rahien <[email protected]> wrote: > > > Make a second call: > > > Expect.Call(_publisher.Send(null)) > > > > > .IgnoreArguments() > > > > .Return(true) > > > > .Repeat.*Never()*; > > > On Wed, Aug 12, 2009 at 2:05 AM, Ben M <[email protected]> wrote: > > > > > well, i made a discovery on this. If you only tell it to repeat once, > > > > then the other calls will subsequently go to the actual real method as > > > > opposed to the mock version of the method. So I've done a work around > > > > using Expect.Call().Do() and keeping my own count of the number of > > > > calls, but this is something that in my opinion I should be able to do > > > > in Rhino mocks. Does anyone know how to do this without having to do > > > > it myself? Ayende? > > > > > On Aug 11, 2:48 pm, Ben M <[email protected]> wrote: > > > > > I have a partial mock on a class I'll call 'Publisher' > > > > > > the publisher has a method called 'Publish' that in turn calls a > > > > > virtual method called Send as follows: > > > > > > public class Publisher > > > > > { > > > > > public bool Publish(MyList list) > > > > > { > > > > > string msg =_msgBuilder.BuildFrom(list); > > > > > bool success = Send(msg); > > > > > > return success; > > > > > } > > > > > > public virtual bool Send(string msg) > > > > > { > > > > > /// snip > > > > > return true; > > > > > } > > > > > > } > > > > > > my unit test then does the following: > > > > > [SetUp] > > > > > public void Setup() > > > > > { > > > > > > _mocks = new MockRepository(); > > > > > > _publisher =_mocks.PartialMock<Publisher>(); > > > > > > } > > > > > > [Test] > > > > > public void OnlyCallSendOnceForEmptyLists() > > > > > { > > > > > Expect.Call(_publisher.Send(null)) > > > > > .IgnoreArguments() > > > > > .Return(true) > > > > > .Repeat.Once; > > > > > > _mocks.ReplayAll(); > > > > > > _publisher.Publish(new MyList()); > > > > > _publisher.Publish(new MyList()); > > > > > > _mocks.VerifyAll(); > > > > > > } > > > > > > I would expect this test to fail as it should be expecting no more > > > > > than 1 call, but the test is passing, and stepping thru the debugger I > > > > > can see it IS in fact making 2 calls, yet the test still passes. What > > > > > am I doing wrong that causes this test to give me a false positive? > > > > > > thanks in advance > > > > > Ben- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
