Fluent Nhibernate映射的单元测试

Col*_*e W 5 nhibernate 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

你会为这些单元测试做什么?你会使用PersistenceSpecification类对这些进行单元测试吗?

编辑:

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

Sly*_*Sly 13

流利的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();
}
Run Code Online (Sandbox Code Playgroud)

这个测试会

  • 创建一个Employee实例
  • 将Employee插入数据库
  • 将记录检索到新的Employee实例中
  • 验证检索到的员工是否与原始员工匹配

这将检查属性映射.

另外我建议使用SqlLite并在内存中测试真正的SQL查询来验证级联规则.

  • 我唯一要补充的是UNIT测试你的Fluent NH映射是不够的.触摸实际的数据库时,仍有一百万个问题可能出错.您应该始终使用真正的集成测试备份这些测试. (3认同)