【问题标题】:What is best practice when creating read-only DAOs for testing?创建用于测试的只读 DAO 时的最佳实践是什么?
【发布时间】:2012-08-08 16:05:12
【问题描述】:

作为我正在工作的项目的一部分,我们有一个只读 DAO(Bill 类)。项目本身不应创建尚未在数据库中表示的 Bill 的新实例,也不应更改或更新此 Bill 类的值。因此,为了防止意外修改 Bill 实例,所有构造函数和私有构造函数都没有设置器(Hibernate 用于将数据库中的账单数据编组到 Bill 实例中,并且不会因缺少公共构造函数和设置器而烦恼)。

现在问题来了:

作为集成测试的一部分,我需要违反我们的项目永远不会的原则 创建未在数据库中表示的新账单对象。什么是最好的违反方式 此原则是否仅用于测试目的?

基于反射的构建器:我提出的一个想法是使用基于反射的构建器,这样Bill 类的代码就不需要更改,并且对构建器进行全面测试以防万一构建器对 Bill 类的字段所做的任何假设都是错误的,很快就会被识别出来。

包私有构造函数:我老板提出的另一种选择是包含一个构建器可以使用的包私有构造函数。这具有更简单的优点,并且需要更少的测试来确保构建器工作。但是,它需要主代码库中的显式代码来容纳它。

我们俩都不太热衷于这两个想法。所以我想知道是否有其他人以前必须处理过类似的问题,以及他们是如何处理的。我一直在翻阅“敏捷测试:面向测试人员和敏捷团队的实用指南”,但到目前为止还没有发现任何相关内容。

注意。它不像直接与数据库交互那么简单,因为账单是复杂的 DAO 层次结构的一部分(包括数据库中的外键约束)。因此,能够快速简单地创建此类层次结构并将所有这些数据持久保存到数据库中的构建器是可取的。

【问题讨论】:

标签: integration-testing agile dao methodology readonly


【解决方案1】:

您能否创建一个 MutableBill 类,将其保存在您的测试源树中并映射到与您的 Bill 类相同的表?

然后您的测试代码可以在测试运行开始时使用MutableBill 填充数据库(例如HSQLDB),而您的其余代码可以继续使用不可变的Bill

【讨论】:

    【解决方案2】:

    如果我必须在这两者之间进行选择,我会使用默认的可见性构造函数。基于反射的编程创建了难以理解且根本不简单的代码。您的 IDE 的查找引用将无法正常工作,因此有人可能会认为他们面临死代码。然后在运行时发现整个事情都坏了。

    这样的添加(作为包私有的东西)是可以接受的,因为更需要彻底的测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多