Unit testing NHibernate如何使单元测试变得简单?

Unit testing NHibernate如何使单元测试变得简单?,unit-testing,nhibernate,orm,Unit Testing,Nhibernate,Orm,NHibernate使用XML文件将类映射到数据库中的表。单元测试XML文件如何比程序代码(C#、JAVA等)更容易?NHibernate是否假定映射XML文件是自动完善的,而无需对其进行测试?对封装NHibernate查询的DAO进行单元测试,以验证NHibernate配置/映射是否正确。在过去几年中,我采取了三种不同的方法: 1-不要做任何测试。当您部署到测试服务器时,了解映射是否正确。这并不理想 2-我编写了一些代码,使用反射找到了所有映射的POCO,并将自动实例化它们(这是一种递归,因此

NHibernate使用XML文件将类映射到数据库中的表。单元测试XML文件如何比程序代码(C#、JAVA等)更容易?NHibernate是否假定映射XML文件是自动完善的,而无需对其进行测试?

对封装NHibernate查询的DAO进行单元测试,以验证NHibernate配置/映射是否正确。

在过去几年中,我采取了三种不同的方法:

1-不要做任何测试。当您部署到测试服务器时,了解映射是否正确。这并不理想

2-我编写了一些代码,使用反射找到了所有映射的POCO,并将自动实例化它们(这是一种递归,因此它甚至可以探索外键),然后从DB中获取它们,以查看是否所有属性都正确持久化

3-围绕我的web服务编写集成测试。我允许这些测试运行web服务代码,这些代码一直到DB。这就出现了任何映射问题


编辑-我要提到的另一件事是,NHibnerate确实有一个很好的特性,您可以使用内存中的数据库。这对于不想模仿NHibernate但又不想让测试依赖于(真实的)数据库服务器的测试非常有用。

Fluent NHibernate使用类而不是XML进行映射,我相信它对测试有一定的支持。

我不确定这是否能解决您的问题。。。基本上,如果你使用nhibernate,那么你最好使用流利的nhibernate。实际上,它使用POCO而不是hbm.xml映射来构建代理类,这使得重构变得更加容易

关于单元测试的问题,我正在寻找一些关于单元测试场景的线索。。比如说,如果你有一个学生属于该系,那么你实际上需要编写测试用例。您不需要任何代码来进行部署中的手动测试。这将解决目前手工测试的问题,因为编写测试夹具可以让你不用手工检查就可以测试你自己的代码,所以手工测试会容易得多

这里有一个例子

[TestFixtureSetUp]
    public void CanMapCorrectlyStudent()
    {
        using (ISession session = PersistanceManager.OpenSession())
        {
            new PersistenceSpecification<Student>(session)  
                .CheckProperty(c=>c.Studentid,5)
                .CheckProperty(c => c.Name, "John")
                .CheckProperty(c=>c.Age , 24)                                        
                .CheckReference(c=>c.Department,new Department { Dept_id = 1 , Dept_name="MCA" })
                .VerifyTheMappings();
        }
    }
[TestFixtureSetUp]
public void可映射正确的学生()
{
使用(ISession session=PersistanceManager.OpenSession())
{
新PersistenceSpecification(会话)
.CheckProperty(c=>c.Studentid,5)
.CheckProperty(c=>c.Name,“John”)
.CheckProperty(c=>c.Age,24)
.CheckReference(c=>c.Department,新部门{Dept\u id=1,Dept\u name=“MCA”})
.验证应用程序();
}
}

您也可以在nhibernate wiki中找到相应的示例。。安装testdriven.net for visual studio,右键单击上面提到的函数体,然后单击运行测试。它会自动为您运行测试,让您无需手动编码和重新检查测试

如果我们不使用NHibernate,我们可以测试DAO吗?问题是NHibernate如何使单元测试“更容易”。始终测试DAO。NHibernate并没有使单元测试变得更容易。这不是设计来的。这是为了抽象你的数据库访问。谢谢你的回答。感激。。。但问题是“NHibernate如何使单元测试变得简单?”您已经得到了一些有用的回答。如果他们有帮助,你至少应该给他们投票,不管你是否认为他们是正确的答案。