2011-04-06 130 views
4

我想了解社區的其他人如何測試他們的Fluent Nhibernate映射。假設我有以下映射:Fluent Nhibernate映射的單元測試

public UserHeaderMap() 
    { 
     Table("USER_HEADER"); 
     Id(x => x.Id, "USER_ID"); 
     Map(x => x.LoginName, "LOGIN_NAME"); 
     Map(x => x.UserPassword, "USER_PASSWORD"); 
     Map(x => x.UserEmail, "USER_EMAIL"); 
     Map(x => x.UserLanguage, "USER_LANGUAGE"); 
     Map(x => x.UserEnabled, "USER_ENABLED"); 

     HasManyToMany(x => x.Groups) 
      .Table("USER_GROUP_COMPOSITE") 
      .ParentKeyColumn("USER_ID") 
      .ChildKeyColumn("GROUP_ID") 
      .Cascade.All() 
      .Inverse(); 
    } 

public class GroupHeaderMap : ClassMap<GroupHeader> 
{ 
    public GroupHeaderMap() 
    { 
     Table("GROUP_HEADER"); 
     Id(x => x.Id, "GROUP_ID"); 
     Map(x => x.Name, "GROUP_NAME"); 
     Map(x => x.Description, "GROUP_DESCRIPTION"); 

     HasManyToMany(x => x.Users) 
      .Table("USER_GROUP_COMPOSITE") 
      .ParentKeyColumn("GROUP_ID") 
      .ChildKeyColumn("USER_ID"); 
    } 
} 

什麼是所有的單元測試,你會寫這些?你會使用PersistenceSpecification類來單元測試這些嗎?

編輯:

我想用SqlLite但是從我的映射,如果我不是我產生什麼樣的模式?我仍然可以以某種方式將我的模式加載到SqlLite中嗎?另外我想知道如果測試SqlLite是否足夠。我們的產品至少需要運行MS SQL和Oracle。僅在SqlLite數據庫上進行測試是否符合我的要求?你也通常測試你已映射的每個實體(構造函數,屬性等)?

回答

10

流利nhibernate有build-in testing methods。有了它們,你可以做以下

[Test] 
public void CanCorrectlyMapEmployee() 
{ 
    new PersistenceSpecification<Employee>(session) 
     .CheckProperty(c => c.Id, 1) 
     .CheckProperty(c => c.FirstName, "John") 
     .CheckProperty(c => c.LastName, "Doe") 
     .VerifyTheMappings(); 
} 

此測試將

  • 創建一個Employee實例
  • 插入員工到數據庫
  • 檢索記錄到一個新的Employee實例
  • 驗證檢索到的員工是否與原始匹配

這將檢查屬性映射。

此外,我會建議使用SqlLite和測試內存中的真正的SQL查詢來驗證級聯規則。

+0

當您提到上述內容時,我添加了其他一些想到的問題。 – 2011-04-06 13:45:48

+3

我只會補充說測試你的Fluent NH映射的UNIT是不夠的。當你觸摸實際的數據庫時,仍然有一百萬件事情可能會出錯。您應該始終使用真正的集成測試來備份這些測試。 – 2011-04-06 14:39:17

+0

上面的URL似乎已經死了,但我在這裏找到了內容:https://github.com/jagregory/fluent-nhibernate/wiki/Persistence-specification-testing – rohancragg 2012-06-12 13:43:50

相關問題