某些ORM技术的某些功能(JPA EntityManager,Hibernate Session等等)可以充当标准JDBC连接的“对象缓存”。
对于某些测试目的,如果我实际上不需要持久保存任何数据(从不向数据库提交任何内容,无论是物理内容还是嵌入内存/内存中的数据)和只是ORM的数据对象级缓存是完全足够的,有没有什么方法我可以完全消除(或模拟)对数据库的需求呢?
**澄清:没有嵌入式或内存数据库。我的意思是根本没有数据库(或者最多是一个绝对没有任何内容的数据源/连接模拟)。
答案 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");
}