我正在使用 Mockito 对业务对象进行单元测试。业务对象使用通常从数据库获取数据的 DAO。为了测试业务对象,我意识到使用单独的内存 DAO(将数据保存在 HashMap 中)比编写所有
when(...).thenReturn(...)
陈述。为了创建这样的 DAO,我首先部分模拟了我的 DAO 接口,如下所示:
when(daoMock.getById(anyInt())).then(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
int id = (Integer) invocation.getArguments()[0];
return map.get(id);
}
});
但我突然想到,自己实现一个全新的 DAO 实现(使用内存中的 HashMap)甚至不使用 Mockito(无需从 InvocationOnMock 对象中获取参数)并让测试的业务对象使用这个新的更容易道。
此外,我读过部分模拟被认为是不好的做法。我的问题是:就我的情况而言,我正在做的事情是不好的做法吗?有什么缺点?对我来说这似乎没问题,我想知道潜在的问题可能是什么。