2010-07-06 35 views
0

嗨我正在寫流利Nhibernate的單元測試,當我跑它通過isloation的測試,但是當我運行多個測試。或運行測試不止一次它開始與下面 System.ApplicationException消息失敗:類型對於屬性「ID」預期「1」類型「System.Int32」,但有「2」「System.Int32」Fluent Nhibernate System.ApplicationException:對於屬性'Id'期待類型'System.Int32'的'1'但得到類型'System.Int32'的'2'

[TextFixture] 公共無效Can_Correctly_Map_Entity() {

 new PersistenceSpecification<UserProfile>(Session) 
      .CheckProperty(c => c.Id, 1) 
      .CheckProperty(c => c.UserName, "user") 
      .CheckProperty(c => c.Address1, "Address1") 
      .CheckProperty(c => c.Address2, "Address2") 

}

回答

0

我建議使用內存數據庫測試您的映射,以便您可以隔離這些測試的映射只。如果您使用內存數據庫,則可以將FluentConfiguration放置在[TestInitialize](MSTest)或[SetUp](NUnit)方法中,並且每次從頭開始創建數據庫(在內存中)。這裏有一個例子:

[TestInitialize] 
public void PersistenceSpecificationTest() 
{ 
    var cfg = Fluently.Configure() 
     .Database(SQLiteConfiguration.Standard.InMemory().UseReflectionOptimizer()) 
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserProfile>()) 
     .BuildConfiguration(); 

    _session = cfg.BuildSessionFactory().OpenSession(); 
    new SchemaExport(cfg).Execute(false, true, false, _session.Connection, null); 
} 

然後測試應該在每次運行時正常工作:

[TestMethod] 
public void CanMapUserProfile() 
{ 
    new PersistenceSpecification<UserProfile>(_session)  
     .CheckProperty(c => c.Id, 1)  
     .CheckProperty(c => c.UserName, "user")  
     .CheckProperty(c => c.Address1, "Address1")  
     .CheckProperty(c => c.Address2, "Address2") 
} 

你需要使用SQLite在這種情況下,與System.Data.SQLite DLL一起,你可以在這裏找到:http://sqlite.phxsoftware.com/

希望有幫助。

1

Id屬性是一個數據庫標識因此它與每個插入到表遞增。其他一些測試也插入一個UserProfile,因此該插入的身份值增加到2。我只是驗證Id屬性不等於0,假設這是它的默認值。

相關問題