模拟JPA / Hibernate数据库

时间:2013-07-10 21:47:29

标签: java database spring hibernate jpa

某些ORM技术的某些功能(JPA EntityManager,Hibernate Session等等)可以充当标准JDBC连接的“对象缓存”。

对于某些测试目的,如果我实际上不需要持久保存任何数据(从不向数据库提交任何内容,无论是物理内容还是嵌入内存/内存中的数据)和只是ORM的数据对象级缓存是完全足够的,有没有什么方法我可以完全消除(或模拟)对数据库的需求呢?

**澄清:没有嵌入式或内存数据库。我的意思是根本没有数据库(或者最多是一个绝对没有任何内容的数据源/连接模拟)。

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用JPA并将其配置为在仅内存模式下使用HSQL。您可以获得完整的JPA功能集,而不会将任何内容写入磁盘。

答案 1 :(得分:1)

后期跟进,但是对于遇到这篇文章的人来说,Acolyte提供了一个模拟的JDBC驱动程序,我认为这是OP正在寻求的。

答案 2 :(得分:0)

您可以使用像dirty-mockito这样的模拟框架。例如

@Mock
private EntityManager em;

@Mock
private Query query;

private WidgetDao widgetDao;

@Test
public void testFindByName() {
  Widget widget = new Widget();

  when(em.createNamedQuery("WidgetDao.findByName")).thenReturn(query);
  when(query.getResultList()).thenReturn(Collections.singletonList(widget));

  assertSame(widget, widgetDao.findByName("Bob"));

  verify(query).setParameter("name", "Bob");
}