mockito当thenReturn不返回存根数组列表

时间:2014-06-01 14:26:15

标签: junit mockito

List<Populate> fullAttrPopulateList = getFullAtrributesPopulateList(); //Prepare return list

when(mockEmployeeDao.getPopulateList(null)).thenReturn(fullAttrPopulateList);

MyDTO myDto = testablePopService.getMyPopData(); //Will call mockEmployeeDao.getPopulateList(null)

//verify(mockEmployeeDao,times(1)).getPopulateList(null);

assertEquals(fullAttrPopulateList.size(), myDto.getPopData().size()); //This fails because myDto.getPopData().size() returns 0

正如您可以看到testablePopService.getMyPopData()调用mockEmployeeDao.getPopulateList(null)但是当我调试它时,返回零大小的列表而不是由getFullAtrributesPopulateList();准备的存根数组列表 如果我取消注释验证语句,它会传递测试意义,getPopulateList(null)行为会被调用。 任何人都可以给我一些建议,为什么我的存根数组列表无法返回,即使它已经验证预期的行为发生了?如果我做错了,如何返回空数组列表而不是null?

1 个答案:

答案 0 :(得分:0)

首先,检查方法是否为非final并在整个层次结构中可见。 Mockito可能无法模拟隐藏的方法(例如,重写包 - 私有抽象类的实现);另外,Mockito是entirely unable to mock final methods,甚至可以检测到该方法是final并警告你。

您可能还想检查您的通话是否正在使用您期望的超载。 Mockito的默认列表返回值是一个空列表,因此您可以简单地对一个方法进行存根并查看另一个方法的默认值。您可以通过临时添加对verifyZeroInteractions的调用来查看Mockito已添加的方法,Mockito将使用模拟已收到的调用列表抛出异常。您还可以添加verifyNoMoreInteractions,甚至将其留在那里,但代价是测试脆弱性(即当实际代码继续工作时测试会中断)。