如何正确模拟Hibernate Query类

时间:2017-04-10 19:41:57

标签: java hibernate unit-testing

我正在尝试对创建Item的DAO调用进行单元测试。对于我们的单元测试,我们将测试数据从开发DB生成的XML文件加载到内存数据库中。这适用于获取或查找数据的调用。但是,由于我不会进入的原因,我们所有的创建和更新都是通过存储过程完成的,这些存储过程在内存测试数据库中不存在。因此,Query.executeUpdate()将始终失败。我的想法是模拟Query类。或者更具体地说,模拟NativeQueryImpl类。我尝试过各种各样的模型,但是模拟的查询没有被使用。这是我目前的情况:

@Mock
Provider<EntityManager> entityManagerProvider;
@Mock
EntityManager entityManager;
@Mock
SessionImplementor sessionImplementor;
@Mock
NativeQueryImpl<?> nativeQuery;

@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();

@Test
public void testCreateItem() {
    when(entityManagerProvider.get()).thenReturn(entityManager);
    when(entityManager.unwrap(SessionImplementor.class)).thenReturn(sessionImplementor);
    when(sessionImplementor.createNativeQuery(any())).thenReturn(nativeQuery);
    when(nativeQuery.executeUpdate()).thenReturn(0);

    final CreateStockItemDTO itemDto = new CreateStockItemDTO();
    itemDto.setRationInd(Boolean.FALSE);

    Item item = dao.createItem(createItemInstance(itemDto));

    assertNotNull(item);
}

我必须遗漏一些东西,但我看不清楚。

0 个答案:

没有答案