模拟列表的Mockito问题

时间:2012-08-30 17:32:06

标签: java mockito

我想模拟一个列表

private Item populateData(Item i) {
    List<Person> groupIdList = xyzDao.getData(id);
    for (Person p: groupIdList) {

    }
}

我想通过模拟groupIdList来测试该函数如何执行此操作?

2 个答案:

答案 0 :(得分:5)

官方Mockito文档有点误导。你不应该模拟列表(没有太多逻辑的数据容器),你应该模拟行为。在您的情况下,xyzDao.getData(id)是行为。模拟xyzDao并返回一些虚假数据:

//given
XyzDao xyzDaoMock = mock(xyzDao);
//inject to XyzService class under test
given(xyzDaoMock.getData(id)).willReturn(Arrays.asList(...));

//when
xyzService.populateData()  //...XyzService uses mocked XyzDao

//then

然后部分,您应verify() xyzDao被调用,或确保返回正确的列表。很难根据您的代码段告诉您需要什么。

答案 1 :(得分:0)

或非BDD版本的Tomasz回答(但如果合适的话,接受他对我的回答):

XyzDao xyzDaoMock = mock(xyzDao);
when(xyzDaoMock.getData(id)).thenReturn(Arrays.asList(...));

xyzService.populateData()  //...XyzService uses mocked XyzDao