当前的问题
请参考相关帖子:hibernate 域类中会出现什么问题——因此我们需要(单元)测试它们? 在我的新 J2EE 项目中,我正在尝试测试(不一定是单元测试)我开始编写的域对象。它们不涉及太多业务逻辑(业务逻辑是 DAO 对象之上的业务服务的一部分),通过测试,我本质上是在确保域对象的完整性,我尝试通过测试 DAO 来做到这一点方法。请注意,我不能使用 JUnit 等测试域对象,因为在我的情况下它们没有任何方法,并且它们具有属性和休眠映射注释。
例如,让我考虑一下Patient域对象。 在这种情况下, PatientDAO正在处理 Patient 域对象的 CRUD 操作。以下是方法(不完整,打算稍后添加更多测试边界条件)。
注意:我没有将这些称为单元测试用例,它们可能是小型集成测试等。我很好,这种方法适用于测试域对象。
PatientDAOTest 类包含: - testCreatePatient(); - 测试更新患者();- testFindPatient(); - testDeletePatient();
PatientDAO 类包含: - createPatient(); - 更新病人();- 查找病人();- 删除病人();
让我们考虑在域对象中测试 updateMethod() 的 testUpdatePatient() 方法。现在,我将如何实现 testUpdatePatient() 方法?好吧,我的想法是: 1. 使用“findPatient()”域方法获取现有患者 2.使用新详细信息更新患者记录 3.使用“updatePatient()”域方法将其保存回数据库 4.检索使用“findPatient()”域方法从数据库返回患者记录 5. 断言更新数据
问题
如您所见,我在测试中使用了数据库,对此我很好,但是这种方法有什么问题吗?
关于这种方法,我真正的问题(读作问题)是什么?
在测试“ updatePatient ()”时,我需要使用“ findPatient ()”方法(实际上是 2 次)。这是我不喜欢的,事实上我必须在测试方法时使用另一种方法,而另一种方法本身可能有问题。当我尝试测试其他 CRUD 方法时,同样的故事也会重复。
或者,我可以编写 select sql 查询以从数据库中获取患者记录,以便从测试方法中断言(在触发更新后),但这只是违背了使用休眠的全部目的(以减少 SQL 编码工作),因此,我不喜欢这种方法。
我的问题是,依赖其他方法来测试特定方法是很常见的,这不是一个坏方法吗?如果这是错误的,我应该如何实际测试我的域对象中的 ORM 映射。
感谢您的评论和对如此冗长的帖子的歉意。