我正在尝试对创建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);
}
我必须遗漏一些东西,但我看不清楚。