某些 ORM 技术(JPA EntityManager's、Hibernate Session's 等)的某些特性可以充当标准 JDBC 连接周围的“对象缓存”。
出于某些测试目的,如果我实际上不需要持久化任何数据(从不向数据库提交任何内容,无论是物理的还是嵌入式的/内存中的)并且仅 ORM 的对象级缓存就足够了,是否存在任何方式我都可以完全消除(或模拟)对数据库的需求?
**澄清:没有嵌入式或内存数据库。我的意思是根本没有数据库(或者最多是一个完全不做任何事情的数据源/连接模拟)。
一种方法是使用 JPA 并将其配置为在仅内存模式下使用 HSQL。您将获得完整的 JPA 功能集,而无需将任何内容写入磁盘。
后续跟进,但对于遇到这篇文章的任何人,Acolyte提供了一个模拟 JDBC 驱动程序,我认为这是 OP 所寻求的。
您可以使用像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");
}