【问题标题】:JMockit Hibernate EmulationJMockit 休眠仿真
【发布时间】:2009-07-10 19:05:00
【问题描述】:
我想知道是否有人尝试过使用 JMockit Hibernate Emulation?
Jmockit 文档说,当运行 Hibernate Emulation 测试时,它们不会使用 O/R 映射信息。所以,这意味着它不测试 O/R 映射、HQL 查询字符串、本机查询等。那么 Hibernate Emulation 的真正好处是什么?可以只创建 MyDAO 模拟并将其用于测试。为什么要为 hibenrate 仿真而烦恼,只是模拟出所有的 DAO。你怎么看?
谢谢。
【问题讨论】:
标签:
java
hibernate
testing
jmockit
【解决方案1】:
查看“jmockit/samples/orderMngmntWebapp”示例测试套件中的orderMngr.domain.customer.CustomerTest,该套件位于 JMockit 完整发行版中。
这个测试类依赖于 Hibernate Emulation。它可以通过“jmockit/build.xml”中的“sampleTests”目标运行。
我创建这个工具的动机主要是当项目有数百个映射实体时,SessionFactory 创建时间太长。 (在一个有 400 多个实体类的项目中,这大约需要 20-30 秒。)当然,这是在一套集成测试中。对于一套单元测试,这个工具没有用。
这个想法是开发人员可以在本地开发环境中快速运行集成测试来测试业务逻辑而不是持久性,同时让自动构建服务器定期运行完整的测试套件,而无需模拟。
请注意,使用 Hibernate 仿真时仍会测试 HQL 查询。假实现将解析 HQL 字符串并针对“持久”在内存中的实体实例执行查询。不过,O/R 映射信息会被忽略。
模拟 DAO 也完全有效,但是您的测试永远不会真正测试 O/R 映射、HQL 查询或实际的数据库访问。使用 Hibernate Emulation,您无需创建模拟,但可以在提供类似于内存数据库的虚假 Hibernate 实现上运行测试。