【问题标题】:How can NHibernate make Unit Test Easy?NHibernate 如何让单元测试变得简单?
【发布时间】:2011-06-05 01:52:45
【问题描述】:

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

【问题讨论】:

  • 您收到了一些有用的回复。如果它们有帮助,你至少应该给它们投票,不管你是否将它们标记为正确答案。

标签: unit-testing nhibernate orm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果我们不使用 NHibernate,我们可以测试 DAO 吗?问题是 NHibernate 如何使单元测试“更容易”。
    • 总是测试 DAO。 NHibernate 并没有真正让单元测试变得更容易。它不是设计来的。它用于抽象您的数据库访问。
    【解决方案3】:

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

    1 - 不做任何测试。在部署到测试服务器时确定映射是否正确。这并不理想。

    2 - 我写了一些代码,使用反射,找到我所有映射的 POCO,并自动实例化它们(它是一种递归,所以它甚至会探索外键)然后从数据库中取回它们以查看是否所有属性都正确保留。

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

    编辑 - 我要提到的另一件事是,NHibnerate 确实有一个不错的功能,您可以在其中使用内存数据库。这对于您不想模拟 NHibnerate 但又不希望您的测试依赖于(真实)数据库服务器的测试很有用。

    【讨论】:

    • 感谢您的回答。赞赏......但问题是“NHibernate 如何让单元测试变得简单?”
    【解决方案4】:

    我不确定这是否可以解决您的问题......基本上如果您使用 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();
            }
        }
    

    您也可以在 nhibernate wiki 中找到相应的示例。为 Visual Studio 安装 testdriven.net,右键单击上面提到的这个函数体,然后单击运行测试。它会自动为您运行测试,让您摆脱手动编码和重新检查测试的所有麻烦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2013-03-19
      • 1970-01-01
      • 2012-02-25
      相关资源
      最近更新 更多