【发布时间】:2012-08-08 16:05:12
【问题描述】:
作为我正在工作的项目的一部分,我们有一个只读 DAO(Bill 类)。项目本身不应创建尚未在数据库中表示的 Bill 的新实例,也不应更改或更新此 Bill 类的值。因此,为了防止意外修改 Bill 实例,所有构造函数和私有构造函数都没有设置器(Hibernate 用于将数据库中的账单数据编组到 Bill 实例中,并且不会因缺少公共构造函数和设置器而烦恼)。
现在问题来了:
作为集成测试的一部分,我需要违反我们的项目永远不会的原则 创建未在数据库中表示的新账单对象。什么是最好的违反方式 此原则是否仅用于测试目的?
基于反射的构建器:我提出的一个想法是使用基于反射的构建器,这样Bill 类的代码就不需要更改,并且对构建器进行全面测试以防万一构建器对 Bill 类的字段所做的任何假设都是错误的,很快就会被识别出来。
包私有构造函数:我老板提出的另一种选择是包含一个构建器可以使用的包私有构造函数。这具有更简单的优点,并且需要更少的测试来确保构建器工作。但是,它需要主代码库中的显式代码来容纳它。
我们俩都不太热衷于这两个想法。所以我想知道是否有其他人以前必须处理过类似的问题,以及他们是如何处理的。我一直在翻阅“敏捷测试:面向测试人员和敏捷团队的实用指南”,但到目前为止还没有发现任何相关内容。
注意。它不像直接与数据库交互那么简单,因为账单是复杂的 DAO 层次结构的一部分(包括数据库中的外键约束)。因此,能够快速简单地创建此类层次结构并将所有这些数据持久保存到数据库中的构建器是可取的。
【问题讨论】:
-
附带说明,既然您担心“意外修改”,您应该注意
@Immutable:docs.jboss.org/hibernate/stable/annotations/reference/en/html/…
标签: integration-testing agile dao methodology readonly