Gré*_*rel 1 java mockito indexoutofboundsexception
Mockito.when(metadataDao.getStuff(Mockito.anyInt()).get(Mockito.anyInt()))
.thenReturn(returnedVariable);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.LinkedList.checkElementIndex(LinkedList.java:555)
at java.util.LinkedList.get(LinkedList.java:476)
at
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用匹配器?
Mockito.anyInt()通过副作用起作用; 当它将值传递给实际类时,它实质上发送0.
它看起来像是metadataDao.getStuff返回一个真实的LinkedList,大小为0.然后,你发送的数量0是真实的LinkedList,它调用get大小为0 的真实方法,你得到你期望的正常错误.
你可以避免在Mockito中使用链式方法调用来避免这样的问题,换句话说,永远不会:
when(obj.methodOne().methodTwo())
Run Code Online (Sandbox Code Playgroud)
相反,只需使用一个方法调用.在您的示例中,这可能是:
List<MyObj> mockList = Mockito.mock(List.class);
Mockito.when(metadataDao.getStuff(Mockito.anyInt()).thenReturn(mockList);
Mockito.when(mockList.get(Mockito.anyInt())).thenReturn(returnedVariable);
Run Code Online (Sandbox Code Playgroud)
还要注意,正如@JeffBowman在评论中指出的那样,你应该永远不会嘲笑List真实的List意志.