2009-04-02 3 views
0

Ich erhalte diesen Fehler bei dem Versuch, eine Erwartung zu setzen auf ein Objekt verwenden, ich verspottet, dass von MembershipUser erbt:kann nicht NMock GetProperty Routine auf eine Eigenschaft eines geerbten Objekt

ContactRepositoryTests.UpdateTest: FailedSystem.InvalidProgramException: JIT Der Compiler hat eine interne Einschränkung gefunden.

Server-Stack-Trace: bei MockObjectType1.ToString()

Ausnahme erneut ausgelöst bei [0]: bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) bei System. Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (ref Message MsgData, Int32-Typ) bei System.Object.ToString() bei NMock2.Internal.ExpectationBuilder.On (Object Empfänger)

Hier sind die Werkzeuge, die ich benutze ...

VS2008 (SP1) Framework 3.5 nUnit 2.4.8 NMock 2.0.0.44 ReSharper 4.1

ich ratlos bin, warum dies passiert wäre. Jede Hilfe wäre willkommen.

Testklasse ...

[TestFixture] 
public class AddressRepositoryTests 
{ 
    private Mockery m_Mockery; 
    private Data.IAddress m_MockDataAddress; 
    private IUser m_MockUser; 

    [SetUp] 
    public void Setup() 
    { 
     m_Mockery = new Mockery(); 

     m_MockDataAddress = m_Mockery.NewMock<Data.IAddress>(); 

     m_MockUser = m_Mockery.NewMock<IUser>(); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     m_Mockery.Dispose(); 
    } 

    [Test] 
    public void CreateTest() 
    { 
     string line1 = "unitTestLine1"; 
     string line2 = "unitTestLine2"; 
     string city = "unitTestCity"; 
     int stateId = 1893; 
     string postalCode = "unitTestPostalCode"; 
     int countryId = 223; 
     bool active = false; 
     int createdById = 1; 

     Expect.Once 
      .On(m_MockUser) 
      .GetProperty("Identity") 
      .Will(Return.Value(createdById)); 

     Expect.Once 
      .On(m_MockDataAddress) 
      .Method("Insert") 
      .With(
       line1, 
       line2, 
       city, 
       stateId, 
       postalCode, 
       countryId, 
       active, 
       createdById, 
       Is.Anything 
      ) 
      .Will(Return.Value(null)); 

     IAddressRepository addressRepository = new AddressRepository(m_MockDataAddress); 
     IAddress address = addressRepository.Create(
      line1, 
      line2, 
      city, 
      stateId, 
      postalCode, 
      countryId, 
      active, 
      m_MockUser 
     ); 

     Assert.IsNull(address); 
    } 
} 

Benutzerklasse ...

public interface IUser 
{ 
    int? Identity { get; set; } 
    int? CreatedBy { get; set; } 
    DateTime CreatedOn { get; set; } 
    int? ModifiedBy { get; set; } 
    DateTime? ModifiedOn { get; set; } 
    string UserName { get; } 
    object ProviderUserKey { get; } 
    string Email { get; set; } 
    string PasswordQuestion { get; } 
    string Comment { get; set; } 
    bool IsApproved { get; set; } 
    bool IsLockedOut { get; } 
    DateTime LastLockoutDate { get; } 
    DateTime CreationDate { get; } 
    DateTime LastLoginDate { get; set; } 
    DateTime LastActivityDate { get; set; } 
    DateTime LastPasswordChangedDate { get; } 
    bool IsOnline { get; } 
    string ProviderName { get; } 
    string ToString(); 
    string GetPassword(); 
    string GetPassword(string passwordAnswer); 
    bool ChangePassword(string oldPassword, string newPassword); 
    bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer); 
    string ResetPassword(string passwordAnswer); 
    string ResetPassword(); 
    bool UnlockUser(); 
} 

public class User : MembershipUser, IUser 
{ 
    #region Public Properties 
    private int? m_Identity; 
    public int? Identity 
    { 
     get { return m_Identity; } 
     set 
     { 
      if (value <= 0) 
       throw new Exception("Address.Identity must be greater than 0."); 

      m_Identity = value; 
     } 
    } 

    public int? CreatedBy { get; set; } 

    private DateTime m_CreatedOn = DateTime.Now; 
    public DateTime CreatedOn 
    { 
     get { return m_CreatedOn; } 
     set { m_CreatedOn = value; } 
    } 

    public int? ModifiedBy { get; set; } 
    public DateTime? ModifiedOn { get; set; } 
    #endregion Public Properties 

    #region Public Constructors 
    public User() 
    { } 
    #endregion Public Constructors 

} 

Adresse Klasse ...

public interface IAddress 
{ 
    int? Identity { get; set; } 
    string Line1 { get; set; } 
    string Line2 { get; set; } 
    string City { get; set; } 
    string PostalCode { get; set; } 
    bool Active { get; set; } 
    int? CreatedBy { get; set; } 
    DateTime CreatedOn { get; set; } 
    int? ModifiedBy { get; set; } 
    DateTime? ModifiedOn { get; set; } 
} 

public class Address : IAddress 
{ 
    #region Public Properties 
    private int? m_Identity; 
    public int? Identity 
    { 
     get { return m_Identity; } 
     set 
     { 
      if (value <= 0) 
       throw new Exception("Address.Identity must be greater than 0."); 

      m_Identity = value; 
     } 
    } 

    public string Line1 { get; set; } 
    public string Line2 { get; set; } 
    public string City { get; set; } 
    public string PostalCode { get; set; } 
    public bool Active { get; set; } 

    public int? CreatedBy { get; set; } 

    private DateTime m_CreatedOn = DateTime.Now; 
    public DateTime CreatedOn 
    { 
     get { return m_CreatedOn; } 
     set { m_CreatedOn = value; } 
    } 

    public int? ModifiedBy { get; set; } 
    public DateTime? ModifiedOn { get; set; } 
    #endregion Public Properties 

} 

AddressRepository Klasse ...

public interface IAddressRepository 
{ 
    IAddress Create(string line1, string line2, string city, int stateId, string postalCode, int countryId, bool active, IUser createdBy); 
} 

public class AddressRepository : IAddressRepository 
{ 
    #region Private Properties 
    private Data.IAddress m_DataAddress; 
    private Data.IAddress DataAddress 
    { 
     get 
     { 
      if (m_DataAddress == null) 
       m_DataAddress = new Data.Address(); 

      return m_DataAddress; 
     } 
     set 
     { 
      m_DataAddress = value; 
     } 
    } 
    #endregion Private Properties 

    #region Public Constructor 
    public AddressRepository() 
    { } 

    public AddressRepository(Data.IAddress dataAddress) 
    { 
     DataAddress = dataAddress; 
    } 
    #endregion Public Constructor 

    #region Public Methods 
    public IAddress Create(string line1, string line2, string city, int stateId, string postalCode, int countryId, bool active, IUser createdBy) 
    { 
     if (String.IsNullOrEmpty(line1)) throw new Exception("You must enter a Address Line 1 to register."); 
     if (String.IsNullOrEmpty(city)) throw new Exception("You must enter a City to register."); 
     if (stateId <= 0) throw new Exception("You must select a State to register."); 
     if (String.IsNullOrEmpty(postalCode)) throw new Exception("You must enter a Postal Code to register."); 
     if (countryId <= 0) throw new Exception("You must select a Country to register."); 

     DataSet dataSet = DataAddress.Insert(
      line1, 
      line2, 
      city, 
      stateId, 
      postalCode, 
      countryId, 
      active, 
      createdBy.Identity, 
      DateTime.Now 
     ); 

     return null; 
    } 
    #endregion Public Methods 
} 

Dataaddress Klasse ...

public interface IAddress 
{ 
    DataSet GetByAddressId (int? AddressId); 
    DataSet Update (int? AddressId, string Address1, string Address2, string City, int? StateId, string PostalCode, int? CountryId, bool? IsActive, Guid? ModifiedBy); 
    DataSet Insert (string Address1, string Address2, string City, int? StateId, string PostalCode, int? CountryId, bool? IsActive, int? CreatedBy, DateTime? CreatedOn); 
} 

public class Address : IAddress 
{ 
    public DataSet GetByAddressId (int? AddressId) 
    { 
     Database database = DatabaseFactory.CreateDatabase(); 
     DbCommand dbCommand = database.GetStoredProcCommand("prAddress_GetByAddressId"); 
     DataSet dataSet; 

     try 
     { 
      database.AddInParameter(dbCommand, "AddressId", DbType.Int32, AddressId); 

      dataSet = database.ExecuteDataSet(dbCommand); 
     } 
     catch (SqlException sqlException) 
     { 
      string callMessage = "prAddress_GetByAddressId " + "@AddressId = " + AddressId; 
      throw new Exception(callMessage, sqlException); 
     } 

     return dataSet; 
    } 

    public DataSet Update (int? AddressId, string Address1, string Address2, string City, int? StateId, string PostalCode, int? CountryId, bool? IsActive, Guid? ModifiedBy) 
    { 
     Database database = DatabaseFactory.CreateDatabase(); 
     DbCommand dbCommand = database.GetStoredProcCommand("prAddress_Update"); 
     DataSet dataSet; 

     try 
     { 
      database.AddInParameter(dbCommand, "AddressId", DbType.Int32, AddressId); 
      database.AddInParameter(dbCommand, "Address1", DbType.AnsiString, Address1); 
      database.AddInParameter(dbCommand, "Address2", DbType.AnsiString, Address2); 
      database.AddInParameter(dbCommand, "City", DbType.AnsiString, City); 
      database.AddInParameter(dbCommand, "StateId", DbType.Int32, StateId); 
      database.AddInParameter(dbCommand, "PostalCode", DbType.AnsiString, PostalCode); 
      database.AddInParameter(dbCommand, "CountryId", DbType.Int32, CountryId); 
      database.AddInParameter(dbCommand, "IsActive", DbType.Boolean, IsActive); 
      database.AddInParameter(dbCommand, "ModifiedBy", DbType.Guid, ModifiedBy); 

      dataSet = database.ExecuteDataSet(dbCommand); 
     } 
     catch (SqlException sqlException) 
     { 
      string callMessage = "prAddress_Update " + "@AddressId = " + AddressId + ", @Address1 = " + Address1 + ", @Address2 = " + Address2 + ", @City = " + City + ", @StateId = " + StateId + ", @PostalCode = " + PostalCode + ", @CountryId = " + CountryId + ", @IsActive = " + IsActive + ", @ModifiedBy = " + ModifiedBy; 
      throw new Exception(callMessage, sqlException); 
     } 

     return dataSet; 
    } 

    public DataSet Insert (string Address1, string Address2, string City, int? StateId, string PostalCode, int? CountryId, bool? IsActive, int? CreatedBy, DateTime? CreatedOn) 
    { 
     Database database = DatabaseFactory.CreateDatabase(); 
     DbCommand dbCommand = database.GetStoredProcCommand("prAddress_Insert"); 
     DataSet dataSet; 

     try 
     { 
      database.AddInParameter(dbCommand, "Address1", DbType.AnsiString, Address1); 
      database.AddInParameter(dbCommand, "Address2", DbType.AnsiString, Address2); 
      database.AddInParameter(dbCommand, "City", DbType.AnsiString, City); 
      database.AddInParameter(dbCommand, "StateId", DbType.Int32, StateId); 
      database.AddInParameter(dbCommand, "PostalCode", DbType.AnsiString, PostalCode); 
      database.AddInParameter(dbCommand, "CountryId", DbType.Int32, CountryId); 
      database.AddInParameter(dbCommand, "IsActive", DbType.Boolean, IsActive); 
      database.AddInParameter(dbCommand, "CreatedBy", DbType.Int32, CreatedBy); 
      database.AddInParameter(dbCommand, "CreatedOn", DbType.DateTime, CreatedOn); 

      dataSet = database.ExecuteDataSet(dbCommand); 
     } 
     catch (SqlException sqlException) 
     { 
      string callMessage = "prAddress_Insert " + "@Address1 = " + Address1 + ", @Address2 = " + Address2 + ", @City = " + City + ", @StateId = " + StateId + ", @PostalCode = " + PostalCode + ", @CountryId = " + CountryId + ", @IsActive = " + IsActive + ", @CreatedBy = " + CreatedBy + ", @CreatedOn = " + CreatedOn; 
      throw new Exception(callMessage, sqlException); 
     } 

     return dataSet; 
    } 
} 
+0

Aktualisiert, um alle Klasse Datei Sand voll UnitTest –

Antwort

0
public interface IUser 
    { 

     // Base class public properties 
     string UserName { get; } 
     object ProviderUserKey { get; } 
     string Email { get; set; } 
     string PasswordQuestion { get; } 
     string Comment { get; set; } 
     bool IsApproved { get; set; } 
     bool IsLockedOut { get; } 
     DateTime LastLockoutDate { get; } 
     DateTime CreationDate { get; } 
     DateTime LastLoginDate { get; set; } 
     DateTime LastActivityDate { get; set; } 
     DateTime LastPasswordChangedDate { get; } 
     bool IsOnline { get; } 
     string ProviderName { get; } 
     string ToString(); 
     string GetPassword(); 
     string GetPassword(string passwordAnswer); 
     bool ChangePassword(string oldPassword, string newPassword); 
     bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer); 
     string ResetPassword(string passwordAnswer); 
     string ResetPassword(); 
     bool UnlockUser(); 
    } 


    public class Caller 
    { 
     public Caller(IUser newUser) 
     { 
      user = newUser; 
     } 


     public IUser user { get; private set; } 
    } 


    [Test] 
    public void RhinoTest() 
    { 
     var userId = Guid.NewGuid(); 
     var mocks = new MockRepository(); 
     var mockUser = mocks.StrictMock<IUser>(); 
     var caller = new Caller(mockUser); 

     Expect.Call(mockUser.ProviderUserKey).Return(userId); 


     mocks.ReplayAll(); 
     var userFromCaller = caller.user.ProviderUserKey; 
     Assert.AreEqual(userId, userFromCaller, "Incorrect userId"); 

     mockUser.VerifyAllExpectations(); 
    } 


    [Test] 
    public void AnotherRhinoTest() 
    { 
     var userId = Guid.NewGuid(); 
     var mockUser = MockRepository.GenerateMock<IUser>(); 
     var caller = new Caller(mockUser); 

     mockUser.Expect(m=>m.ProviderUserKey).Return(userId); 

     var userFromCaller = caller.user.ProviderUserKey; 

     Assert.AreEqual(userId, userFromCaller, "Incorrect userId"); 

     mockUser.VerifyAllExpectations(); 

    } 

gibt es die Arbeits Nashorn Mock Tests. in Rhino Mock Test wurden Sie den Anruf Eigenschaft fehlt, die erwartet wurde (wie durch Expect.call eingestellt)

Aus durch Blick auf den Code, es scheint, dass Sie den gleichen Fehler in NMock Szenario tun

+0

Ich bin mir nicht sicher, ich verstehe RhinoMock .. Ich habe versucht, es schnell einzurichten, weil ich Angst hatte, es war ein nMock Problem. Wenn Sie mit nMock vertraut sind, können Sie mir zeigen, worüber Sie sprechen? Was Sie sagen, ist nicht ganz für mich klicken. Ich habe nicht alle nMock-Code, ich werde es aktualisieren ... –

1

Habe gerade das selbe Problem gelöst.

NICHT ToString() zur Schnittstellendefinition hinzufügen. Es ist bereits in jedem Objekt enthalten.

Verwandte Themen