【问题标题】:Unit tests for Fluent Nhibernate mappingsFluent Nhibernate 映射的单元测试
【发布时间】:2011-04-06 01:25:47
【问题描述】:

我正在尝试了解其他社区如何测试他们的 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 数据库上进行测试会满足我的要求吗?此外,您是否通常会测试您已映射的每个实体(构造函数、属性等)?

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    Fluent 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 实例中
    • 验证检索到的员工是否与原始员工匹配

    这将检查属性映射。

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

    【讨论】:

    • 我添加了您在上面提到这一点时想到的其他问题。
    • 我唯一要补充的是,UNIT 测试您的 Fluent NH 映射是不够的。当您触摸实际的数据库时,仍有一百万件事情可能出错。您应该始终使用真正的集成测试来备份这些测试。
    • 上面的网址好像已经死了,但是我在这里找到了内容:github.com/jagregory/fluent-nhibernate/wiki/…
    • 什么是会话?如何准备会话对象?
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2013-01-07
    相关资源
    最近更新 更多