1

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

现在的问题:

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

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

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

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

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

4

2 回答 2

1

Can you create a MutableBill class that is kept in your test source tree and is mapped to the same table as your Bill class?

Then your test code could populate the DB (for example HSQLDB) at the beginning of the test run using MutableBill and the rest of your code could continue using the immutable Bill.

于 2012-08-12T21:12:07.377 回答
0

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

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

于 2012-09-02T17:40:04.577 回答