Java iterable.iterator().hasNext()在模拟行为后返回false
我模拟了一个iterable,并为Java iterable.iterator().hasNext()在模拟行为后返回false,java,mockito,Java,Mockito,我模拟了一个iterable,并为iterable.iterator()和iterable.iterator().next()和iterable.iterator().hasNext()添加了when条件 我可以打印并看到调用时,iterable.iterator()为我提供了一个迭代器,但是hasNext()似乎在模拟它之后返回false 下面是我如何模拟迭代器和Iterable // mock iterator final Iterator mockIterator = Mockito.mo
iterable.iterator()
和iterable.iterator().next()
和iterable.iterator().hasNext()添加了when条件
我可以打印并看到调用时,iterable.iterator()
为我提供了一个迭代器,但是hasNext()
似乎在模拟它之后返回false
下面是我如何模拟迭代器
和Iterable
// mock iterator
final Iterator mockIterator = Mockito.mock(Iterator.class);
final Iterable mockIterable = Mockito.mock(Iterable.class);
Mockito.when(mockIterator.hasNext()).thenReturn(true, false);
Mockito.when(mockIterator.next()).thenReturn(mockGoogleAdsRow);
Mockito.when(mockIterable.iterator()).thenReturn(mockIterator);
Mockito.when(searchPagedResponse.iterateAll()).thenReturn(mockIterable);
我在代码中有这个for循环,需要测试(验证)
谢谢你的帮助
编辑:
searchPagedResponse
是这样被嘲笑的
searchPagedResponse = Mockito.mock(GoogleAdsServiceClient.SearchPagedResponse.class);
mockGoogleAdsRow = Mockito.mock(GoogleAdsRow.class);
Mockito.when(mockGoogleAdsServiceClient.searchPagedCallable()).thenReturn(callable);
Mockito.when(mockGoogleAdsServiceClient.searchPagedCallable().call(searchGoogleAdsRequest)).thenReturn(searchPagedResponse);
我认为简单的方法就是这样做,而不是模仿迭代器
Mockito.when(searchPagedResponse.iterateAll()).thenReturn(Arrays.asList(mockGoogleAdsRow));
不知道为什么模仿迭代器会失败,
但是我最近开始使用Java,非常简单的事情,我一直在用各种方法来做。如何模拟searchPagedResponse
响应response
和searchPagedResponse
是相同的对象吗?是的response
和searchPagedResponse
是相同的对象
Mockito.when(searchPagedResponse.iterateAll()).thenReturn(Arrays.asList(mockGoogleAdsRow));