我想使用JUnit来测试Hibernate代码,例如insert,update,delete,..方法和事务管理。
但是我不知道如何有效地应用Hibernate的单元测试以及我应该用Hibernate测试什么。
如何测试DAO方法?
希望你能给我一些指导!
答案 0 :(得分:4)
您可以使用 DBUnit 来测试DAO Layer。因为您需要测试数据。
示例: DBUnit xml会将虚拟数据插入到您描述的数据库中,然后您可以调用assertEquals(“myname”,userDAO.findById(1) .getName());测试后,您可以使用 DBUnit 删除虚拟数据。检查 detail 。
文件
的 Hibernate testing with dbunit 强>
的 DBUnit and Hibernate 强>
答案 1 :(得分:2)
您可以使用多种方法,具体取决于您的方案
@Before
中插入所有需要的数据,然后在@After
中删除。然而,这并不是一个“单位”测试,因为它取决于一些外部先决条件。答案 2 :(得分:2)
我使用了Chris Richardson的方法,在POJO的行动书中描述
内存中SQL数据库
赞成
缺点
命名查询
赞成
缺点
模拟存储库
赞成
缺点
<强> DBUnit的强>
赞成
缺点
的问候,
答案 3 :(得分:0)
好的,几点 首先,如果你必须测试与数据库对话的实际代码,使用DBUnit让你的生活更轻松,建议你使用HSQLDB,这样你的测试就可以设置他们的运行时环境,无需安装和配置数据库。
其次,如果你不必与数据库交谈,我会使用一般的模拟库(例如EasyMock,JMock或Mockito),并且不进行测试真正与数据库交谈,这通常会使测试更快更简单。
答案 4 :(得分:0)
就我个人而言,我非常谨慎地使用像HQLnate这样的HSQLDB等嵌入式数据库,并期望当你将它移动到Oracle / MySQL / SQL服务器时,一切都会完全相同。 Hibernate过于漏洞了。
除了JUnit之外,我没有其他框架的经验。我发现它做得很好。 以下是我一直记得的一些事情:
答案 5 :(得分:0)
如果您已创建DAO对象,则可以向其发送一些对象,调用save,然后检索这些对象并测试字段值。这是非常基本的Hibernate测试。
确保在设置或拆卸方法中清理数据。如果保存对象,请将其删除。
Rails的最佳实践是使用单独的数据库进行测试,其中一个填充了测试数据。我不会对生产数据库这样做;如果您有自己的开发数据库,您可以轻松地重新填充数据,只需使用它。