> 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 a
stub and not a mock.  So why would a mock work and not a stub?


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 the private set and exposed onlly a public getter and backed
>    the property with a private variable.
>
> [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
>         {
>             private string 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 a private setter...
>
> > > 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; private set; }
>
> > >               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