Exact same situation here as well (virtual auto prop for NHibernates
usage)

On Jun 8, 3:02 am, Peter Morris <[email protected]> wrote:
> > setting the value of a virtual property in your constructor.  That's a 
> > no-no.
>
> It's only virtual to allow NHibernate to create a proxy for it.  I'll
> be okay, it will only access a backing field.
>
> > As I suspected the use of Auto-Props here messed you up.
>
> I see what you have done, but what causes the original problem?  I'm a
> "why" kind of person :-)
>
> PS: Changing GenerateStub to GenerateMock works, although I want astuband not 
> a mock.  So why would a mock work and not astub?
>
> Cheers
>
> Pete
>
> On Jun 7, 3:42 pm, Tim Barcz <[email protected]> wrote:
>
> > As I suspected the use of Auto-Props here messed you up.
>
> > This code works for me:  *Use caution when using auto props and virtual!!!*
>
> > Two things to note about my code below:
>
> >    - I removed the call to validator.  It wasn't causing the test to fail,
> >    so I removed it.
> >    - I removed theprivateset and exposed onlly a public getter and backed
> >    the property with aprivatevariable.
>
> > [TestFixture]
> >     public class PeterTests
> >     {
> >         [Test]
> >         public void ReturnsRequired_ForEmailAddress_WhenNull()
> >         {
> >             User mockUser = MockRepository.GenerateStub<User>("");
> >             mockUser.Stub(x => x.EmailAddress).Return(null);
>
> >             Console.WriteLine(mockUser.EmailAddress);
> >         }
>
> >         public class User
> >         {
> >            privatestring emailAddress;
>
> >             public virtual string Title { get; set; }
> >             public virtual string GivenName { get; set; }
> >             public virtual string FamilyName { get; set; }
>
> >             public virtual string EmailAddress
> >             {
> >                 get { return emailAddress; }
> >             }
>
> >             public User(string emailAddress)
> >             {
> >                 this.emailAddress = emailAddress;
> >             }
> >         }
> >     }
>
> > On Sun, Jun 7, 2009 at 7:32 AM, Tim Barcz <[email protected]> wrote:
> > > Also auto props are great bit your setting the value of a virtual
> > > property in your constructor.  That's a no-no.
>
> > > (Thinking out loud) I'm thinking this may be your issue since dynamic
> > > proxy will want to subclass User but is running into issues with
> > > setting the email address since it is virtual in the base class.
>
> > > On 6/7/09, Peter Morris <[email protected]> wrote:
>
> > > > Here is my test...
>
> > > > [TestMethod]
> > > > public void ReturnsRequired_ForEmailAddress_WhenNull()
> > > > {
> > > >       User mockUser = MockRepository.GenerateStub<User>("");
> > > >       mockUser.Stub(x => x.EmailAddress).Return(null);
> > > >       Validator.GetErrors(mockUser)
> > > >               .Where(e => e.FieldName == "EmailAddress" && e.Error ==
> > > > "Required").Single();
> > > > }
>
> > > > Results in this exception:
>
> > > > Test method
>
> > > TaskSmart.DomainClasses.Tests.UserValidatorTests.ReturnsRequired_ForEmailAd
> > >  dress_WhenNull
> > > > threw exception:  System.InvalidOperationException: You are trying to
> > > > set an expectation on a property that was defined to use
> > > > PropertyBehavior.
> > > > Instead of writing code such as this: mockObject.Stub(x =>
> > > > x.SomeProperty).Return(42);
> > > > You can use the property directly to achieve the same result:
> > > > mockObject.SomeProperty = 42;.
>
> > > > I think the error message is incorrect.  I cannot set the property
> > > > because it has aprivatesetter...
>
> > > > namespace TaskSmart.DomainClasses
> > > > {
> > > >       public class User
> > > >       {
> > > >               public virtual string Title { get; set; }
> > > >               public virtual string GivenName { get; set; }
> > > >               public virtual string FamilyName { get; set; }
> > > >               public virtual string EmailAddress { get;privateset; }
>
> > > >               public User(string emailAddress)
> > > >               {
> > > >                       EmailAddress = emailAddress;
> > > >               }
> > > >       }
> > > > }
>
> > > > So how should I get this test to work?  I don't want to have to define
> > > > interfaces for my domain objects just to achieve testing.
>
> > > > Thanks
>
> > > > Pete
>
> > > --
> > > Sent from my mobile device
>
> > > Tim Barcz
> > > ASPInsider
> > >http://timbarcz.devlicio.us
> > >http://www.twitter.com/timbarcz
>
> > --
> > Tim Barcz
> > ASPInsiderhttp://timbarcz.devlicio.ushttp://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