2

某些 ORM 技术(JPA EntityManager's、Hibernate Session's 等)的某些特性可以充当标准 JDBC 连接周围的“对象缓存”。

出于某些测试目的,如果我实际上不需要持久化任何数据(从不向数据库提交任何内容,无论是物理的还是嵌入式的/内存中的)并且仅 ORM 的对象级缓存就足够了,是否存在任何方式我都可以完全消除(或模拟)对数据库的需求?

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

4

3 回答 3

1

一种方法是使用 JPA 并将其配置为在仅内存模式下使用 HSQL。您将获得完整的 JPA 功能集,而无需将任何内容写入磁盘。

于 2013-07-10T21:54:16.813 回答
1

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

于 2015-03-11T14:53:40.640 回答
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");
}
于 2013-07-11T15:46:21.477 回答