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