我想模拟一个列表
private Item populateData(Item i) {
List<Person> groupIdList = xyzDao.getData(id);
for (Person p: groupIdList) {
}
}
我想通过模拟 groupIdList 来测试该功能如何执行?
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
在then部分中,您应该调用或确保返回正确的列表verify()
。xyzDao
根据您的代码片段很难说出您需要什么。
或 Tomasz 答案的非 BDD 版本(但如果合适,请接受他对我的回答):
XyzDao xyzDaoMock = mock(xyzDao);
when(xyzDaoMock.getData(id)).thenReturn(Arrays.asList(...));
xyzService.populateData() //...XyzService uses mocked XyzDao