Fluent-Nhibernate映射的单元测试

Fluent-Nhibernate映射的单元测试,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我试图了解社区的其他人是如何测试他们流利的Nhibernate映射的。假设我有以下映射: public UserHeaderMap() { Table("USER_HEADER"); Id(x => x.Id, "USER_ID"); Map(x => x.LoginName, "LOGIN_NAME"); Map(x => x.UserPassword, "USER_PASSWORD");

我试图了解社区的其他人是如何测试他们流利的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");
    }
}
public UserHeaderMap()
{
表(“用户标题”);
Id(x=>x.Id,“用户Id”);
Map(x=>x.LoginName,“LOGIN_NAME”);
Map(x=>x.UserPassword,“USER_PASSWORD”);
Map(x=>x.UserEmail,“USER_EMAIL”);
Map(x=>x.UserLanguage,“用户语言”);
Map(x=>x.UserEnabled,“USER_ENABLED”);
HasManyToMany(x=>x.Groups)
.表格(“用户组组合”)
.ParentKeyColumn(“用户ID”)
.ChildKeyColumn(“组ID”)
.Cascade.All()
.Inverse();
}
公共类GroupHeaderMap:ClassMap
{
公共组头映射()
{
表(“组标题”);
Id(x=>x.Id,“组Id”);
映射(x=>x.Name,“组名称”);
地图(x=>x.描述,“组描述”);
HasManyToMany(x=>x.Users)
.表格(“用户组组合”)
.ParentKeyColumn(“组ID”)
.ChildKeyColumn(“用户ID”);
}
}
你会为这些编写什么样的单元测试?您会使用PersistenceSpecification类对这些进行单元测试吗

编辑:

我想使用SqlLite,但如果我不是从映射生成模式呢?我还能以某种方式将模式加载到SqlLite中吗?我还想知道测试SqlLite是否真的足够。我们的产品至少需要在MS SQL和Oracle上运行。仅在SqlLite数据库上进行测试是否符合我的要求?另外,您是否通常测试您映射的每个实体(构造函数、属性等)?

Fluent nhibernate有。使用它们,您可以执行以下操作

[Test]
public void CanCorrectlyMapEmployee()
{
    new PersistenceSpecification<Employee>(session)
        .CheckProperty(c => c.Id, 1)
        .CheckProperty(c => c.FirstName, "John")
        .CheckProperty(c => c.LastName, "Doe")
        .VerifyTheMappings();
}
[测试]
public void CanCorrectlyMapEmployee()
{
新PersistenceSpecification(会话)
.CheckProperty(c=>c.Id,1)
.CheckProperty(c=>c.FirstName,“John”)
.CheckProperty(c=>c.LastName,“Doe”)
.验证应用程序();
}
这项测试将

  • 创建一个雇员实例
  • 将员工插入数据库
  • 将记录检索到新的Employee实例中
  • 验证检索到的员工与原始员工匹配
这将检查属性映射


我还建议使用SqlLite并在内存中测试真实的SQL查询,以验证级联规则

我已经添加了您在上面提到这一点时想到的其他问题。我唯一要添加的是,单元测试您的Fluent NH映射是不够的。当你触摸实际的分贝时,仍然有一百万件事情会出错。您应该始终使用真正的集成测试备份这些测试。上面的URL似乎已经消失,但我在此处找到了内容: