用NDBUnit验证NHibernate映射

用NDBUnit验证NHibernate映射,nhibernate,ndbunit,Nhibernate,Ndbunit,我目前在一个项目中使用NHibernate,并使用NDBUnit为我的单元测试用数据填充数据库。我想做的是,在加载数据时,根据NHibernate返回的类实例验证NDBUnit使用的XML 似乎我可以使用类上的反射来获取所有属性,然后在NDBUnit XML数据集中查找这些列值。我只是不确定我是否在重新发明轮子,或者是否有更好的方法来验证我的所有NHibernate映射是否正确?查看Fluent NHibernate中的PersistenceSpecification。该类中没有依赖于Fluen

我目前在一个项目中使用NHibernate,并使用NDBUnit为我的单元测试用数据填充数据库。我想做的是,在加载数据时,根据NHibernate返回的类实例验证NDBUnit使用的XML


似乎我可以使用类上的反射来获取所有属性,然后在NDBUnit XML数据集中查找这些列值。我只是不确定我是否在重新发明轮子,或者是否有更好的方法来验证我的所有NHibernate映射是否正确?

查看Fluent NHibernate中的PersistenceSpecification。该类中没有依赖于Fluent NHibernate的内容,我以前在测试普通的旧NHibernate hbm.xml文件时使用过它

例如,您可以编写如下测试:

[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”)
.验证应用程序();
}

强烈推荐。

如果您使用的是已安装的数据库,这可能会起作用,但是如果您使用的是内存中的数据库(例如sqlite),这是我提倡的集成测试,我不认为此测试特别有用。这是因为内存中的数据库将“从”映射创建,而检查是否可以插入记录的测试只是测试NHibernate ORM本身。