作为我正在工作的项目的一部分,我们有一个只读的 DAO(比尔类)。项目本身不应创建尚未在数据库中表示的 Bill 的新实例,也不应更改或更新此 Bill 类的值。因此,为了防止意外修改 Bill 实例,所有构造函数和私有构造函数都没有设置器(Hibernate 用于将数据库中的账单数据编组到 Bill 实例中,并且不会因缺少公共构造函数和设置器而烦恼)。
现在的问题:
作为集成测试的一部分,我需要违反我们的项目永远不会创建未在数据库中表示的新账单对象的原则。为了测试目的而违反这一原则的最佳方式是什么?
基于反射的构建器:我提出的一个想法是使用基于反射的构建器,这样 Bill 类的代码就不需要更改,并且在构建器对字段的任何假设的情况下对构建器进行全面测试比尔类错误很快被识别出来。
包私有构造函数:我老板提出的另一种选择是包含一个构建器可以使用的包私有构造函数。这具有更简单的优点,并且需要更少的测试来确保构建器工作。但是,它需要主代码库中的显式代码来适应它。
我们俩都不太热衷于这两个想法。所以我想知道是否有其他人以前必须处理过类似的问题,以及他们是如何处理的。我一直在翻阅“敏捷测试:测试人员和敏捷团队的实用指南”,但到目前为止还没有发现任何相关内容。
注意。它不像直接与数据库交互那么简单,因为账单是复杂的 DAO 层次结构的一部分(包括数据库中的外键约束)。因此,能够快速简单地创建此类层次结构并将所有这些数据持久保存到数据库中的构建器是可取的。