iterable.iterator().hasNext() 在模拟行为后返回 false
iterable.iterator().hasNext() returning false after mocking behaviour
我模拟了一个可迭代对象并添加了 iterable.iterator()
和 iterable.iterator().next()
以及 iterable.iterator().hasNext()
的条件。
我可以打印并看到调用时 iterable.iterator()
给了我一个迭代器,但是 hasNext()
似乎在模拟它之后返回 false。
这是我如何嘲笑 Iterator
和 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循环需要测试(验证)
// System.out.println("response.iterateAll()" + response.iterateAll());
// This prints --> response.iterateAll()Mock for Iterable, hashCode: 1027306253
// System.out.println("next " + response.iterateAll().iterator().next());
// This prints --> next Mock for GoogleAdsRow, hashCode: -767510433
-------------> HERE THIS PART IS FAILING, HASNEXT
// System.out.println("has next " + response.iterateAll().iterator().hasNext());
// This prints --> has next false
// System.out.println("size " + Iterators.size(response.iterateAll().iterator()));
// This prints size 0
for (final GoogleAdsRow googleAdsRow : response.iterateAll()) {
System.out.println("Inside loop");
感谢任何帮助
编辑:
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,如此简单的事情,我一直在绕圈子做。
我模拟了一个可迭代对象并添加了 iterable.iterator()
和 iterable.iterator().next()
以及 iterable.iterator().hasNext()
的条件。
我可以打印并看到调用时 iterable.iterator()
给了我一个迭代器,但是 hasNext()
似乎在模拟它之后返回 false。
这是我如何嘲笑 Iterator
和 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循环需要测试(验证)
// System.out.println("response.iterateAll()" + response.iterateAll());
// This prints --> response.iterateAll()Mock for Iterable, hashCode: 1027306253
// System.out.println("next " + response.iterateAll().iterator().next());
// This prints --> next Mock for GoogleAdsRow, hashCode: -767510433
-------------> HERE THIS PART IS FAILING, HASNEXT
// System.out.println("has next " + response.iterateAll().iterator().hasNext());
// This prints --> has next false
// System.out.println("size " + Iterators.size(response.iterateAll().iterator()));
// This prints size 0
for (final GoogleAdsRow googleAdsRow : response.iterateAll()) {
System.out.println("Inside loop");
感谢任何帮助
编辑:
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,如此简单的事情,我一直在绕圈子做。