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?
答案 0 :(得分:0)
首先,检查方法是否为非final
并在整个层次结构中可见。 Mockito可能无法模拟隐藏的方法(例如,重写包 - 私有抽象类的实现);另外,Mockito是entirely unable to mock final
methods,甚至可以检测到该方法是final
并警告你。
您可能还想检查您的通话是否正在使用您期望的超载。 Mockito的默认列表返回值是一个空列表,因此您可以简单地对一个方法进行存根并查看另一个方法的默认值。您可以通过临时添加对verifyZeroInteractions
的调用来查看Mockito已添加的方法,Mockito将使用模拟已收到的调用列表抛出异常。您还可以添加verifyNoMoreInteractions
,甚至将其留在那里,但代价是测试脆弱性(即当实际代码继续工作时测试会中断)。