No bug here that is the expected behavior

On 10/5/09, Alex McMahon <[email protected]> wrote:
> I see why it is happening now. When you use a MockRepository instance the
> repository is created in record mode, therefore you could get your version
> to work by adding mocks.ReplayAll() after you setup your stubbed response.
>
> When you use the static method it automatically puts the repository into
> replay mode.
>
> I think this basically comes down to a slight mixing of AAA and
> record/replay syntax.
>
> I'd say it's not really a bug
>
> 2009/10/5 Scott White <[email protected]>
>
>>
>> Good work around.  I think maybe this is a bug in Rhino Mocks?
>>
>> If nobody has a better explanation then I'll add it to GitHub here:
>> http://github.com/ayende/rhino-mocks/issues
>>
>> Thanks,
>> Scott
>>
>> On Oct 5, 8:59 am, Alex McMahon <[email protected]> wrote:
>> > I wont pretend to understand why... but you can fix the test by not
>> creating
>> > an instance of MockRepository, instead use static method
>> > MockRepository.GenerateStub<IDogDao>()... Once I did that it fixed the
>> test.
>> >
>> > Perhaps someone with better knowledge of the internals can explain why
>> this
>> > is happening. I can't remember what the difference between the static
>> > and
>> > instance methods is... It sort of sounds like a problem with
>> > RecursiveMocking
>> >
>> > 2009/10/5 Scott White <[email protected]>
>> >
>> >
>> >
>> >
>> >
>> > > Below code reproduces the bug precisely:
>> >
>> > >    public class Dog
>> > >    {
>> > >        public virtual int Speed { get; set; }
>> > >        public virtual bool Active { get; set; }
>> > >    }
>> >
>> > >    public interface IDogDao
>> > >    {
>> > >        Dog GetDog();
>> > >    }
>> >
>> > >    public class DogDao : IDogDao
>> > >    {
>> > >        public Dog GetDog() { throw new NotImplementedException(); }
>> > >    }
>> >
>> > >    public class MyService
>> > >    {
>> > >        public IDogDao DogDao { get; set; }
>> >
>> > >        public void Manipulate()
>> > >        {
>> > >            Dog dog = DogDao.GetDog();
>> > >            if (dog.Active)
>> > >            {
>> > >                dog.Speed++;
>> > >            }
>> > >            else
>> > >            {
>> > >                dog.Speed = 0;
>> > >            }
>> > >        }
>> > >    }
>> >
>> > >    public class MyService_test
>> > >    {
>> > >        [Test]
>> > >        public void Manipulate_active_dog()
>> > >        {
>> > >            var dog = new Dog() {Active = true, Speed = 1};
>> > >            var mocks = new MockRepository();
>> > >            var dao = mocks.Stub<IDogDao>();
>> > >            dao.Stub(x => x.GetDog()).Return(dog);
>> > >            MyService svc = new MyService() {DogDao = dao};
>> > >            svc.Manipulate();
>> > >            Assert.AreEqual(2, dog.Speed);
>> > >        }
>> > >    }
>> >
>> > > If I take the Virtual off of my Dog class then it doesn't throw an
>> > > exception but my test fails because Rhino Mocks is sending a new Dog
>> > > object with default values (not the values I set).
>> >
>> > > On Oct 4, 6:05 pm, Tim Barcz <[email protected]> wrote:
>> > > > Please post the failing code/test (that always helps).
>> >
>> > > > Tim
>> >
>> > > > On Sun, Oct 4, 2009 at 6:03 PM, Scott White <[email protected]
>> >
>> > > wrote:
>> >
>> > > > > I was migrating some of my R&P methods into stubs but one of them
>> > > > > I
>> > > > > could not convert over.  This I think is because the return value
>> is a
>> > > > > class with all virtual properties and Rhino Mocks seems to be
>> proxying
>> > > > > it and not returning the values that I set.
>> >
>> > > > > dao.Stub(x => x.FindByUser(user.GetType(), user.Username)).Return
>> > > > > (user); // dao.Expect has same behavior
>> >
>> > > > > later in my test:
>> >
>> > > > > service.Authenticate(..)
>> >
>> > > > > This service calls the dao and takes the user object and
>> maniuplates
>> > > > > it if necessary.  Problem with this mechanism is that I'm getting
>> an
>> > > > > exception
>> >
>> > > > > Previous method 'AppUser.get_Active();' requires a return value or
>> an
>> > > > > exception to throw.
>> >
>> > > > > On a check of the Active flag within my Authenticate function.
>> > > > > For
>> > > > > the time being I've reverted back to recording this expectation.
>>  Any
>> > > > > idea why Rhino Mocks is proxying my user object that is being
>> returned
>> > > > > or how to prevent it from doing so?
>> >
>> > > > --
>> > > > Tim Barcz
>> > > > Microsoft ASPInsiderhttp://timbarcz.devlicio.ushttp://
>> > >www.twitter.com/timbarcz
>> >
>>
>
> >
>

-- 
Sent from my mobile device

Tim Barcz
Microsoft C# MVP
Microsoft ASPInsider
http://timbarcz.devlicio.us
http://www.twitter.com/timbarcz

--~--~---------~--~----~------------~-------~--~----~
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