我想模拟一个列表
private Item populateData(Item i) {
List<Person> groupIdList = xyzDao.getData(id);
for (Person p: groupIdList) {
}
}
我想通过模拟groupIdList来测试该函数如何执行此操作?
答案 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