当前问题
请参阅相关帖子:What can go wrong in hibernate domain classes – so that we need to (unit) test them? 在我的新J2EE项目中,我试图测试(不一定是单元测试)我开始编写的域对象。它们不涉及很多业务逻辑(业务逻辑是DAO对象之上的业务服务的一部分),通过测试,我基本上确保域对象的完整性,我试着通过测试DAO来做到这一点方法。请注意,我无法使用JUnit等测试域对象,因为它们在我的情况下没有任何方法,并且它们具有属性和hibernate映射注释。
例如,让我考虑 Patient 域对象。在这种情况下, PatientDAO 正在处理Patient域对象的CRUD操作。以下是方法(不完整并打算稍后添加更多测试边界条件)。
注意:我不是将这些称为单元测试用例,它们可能是迷你集成测试等。我很好,这种方法可用于测试域对象。
PatientDAOTest类包含: - testCreatePatient(); - testUpdatePatient(); - testFindPatient(); - testDeletePatient();
PatientDAO课程包含: - createPatient(); - updatePatient(); - findPatient(); - deletePatient();
让我们考虑测试域对象中的updateMethod()的testUpdatePatient()方法。现在,我将如何实现testUpdatePatient()方法?好吧,我在想: 1.使用'findPatient()'域方法获取现有患者 2.使用新的详细信息更新患者记录 3.使用“updatePatient()”域方法将其保存回数据库 4.使用'findPatient()'域方法从数据库中检索患者记录 5.断言更新的数据
问题
正如您所看到的,我在测试中使用数据库,我很好,但这种方法有什么问题吗?
关于这种方法,我的真正问题(读作问题)是什么?
我需要在测试' updatePatient ()'时使用' findPatient ()'方法(实际上是2次)。这是我不喜欢的事实,我必须在测试方法时使用另一种方法,而另一种方法本身可能是错误的。当我尝试测试其他CRUD方法时,同样的故事重复出现。
或者,我可以编写select sql查询从数据库中获取患者记录,以便从测试方法中断言(在更新被触发后),但它只是打败了使用hibernate的整个目的(以减少SQL编码工作)因此,我不喜欢这种方法。
我的问题是,通常依赖其他方法来测试特定方法,这是一个不错的方法吗?如果这是错误的,我应该如何在我的域对象中实际测试ORM映射。
感谢您对这么长篇文章的评论和道歉。
答案 0 :(得分:1)
根据我的经验,回答你的主要问题很简单,但你还有其他几个概念问题。