我有这个包含接口的java代码。
ILocation<ILocation> contactLocations = fileSystem.getContactLocations();
for (ILocation location : contactLocations) {
location.getType();
...
}
public interface ILocation{
String getName();
...
}
public interface ILocationS<T extends ILocation> extends IListCollectionWrapper<T> {
...
}
public abstract interface IListCollectionWrapper<E>extends ICollectionWrapper<E>{
public abstract List<E> getAsList();
}
ILocation<ILocation> contactLocations = fileSystem.getContactLocations();
for (ILocation locations : contactLocations) {
...
}
我使用Mockito,我尝试测试for循环的内容。
Iterator<ILocation> mockIterator = mock(Iterator.class);
Mockito.when(locations.iterator()).thenReturn(mockIterator);
Mockito.when(mockIterator.next()).thenReturn(location);
Mockito.when(location.getType()).thenReturn("test");
我从不输入de for loop
答案 0 :(得分:0)
你没有正确地模仿迭代器的另一个重要方法hasNext
。默认情况下,Mockito将为所有布尔类型的方法返回false
,因此hasNext
将始终为false,并且您永远不会进入for循环。
这是不像大多数Iterables那样模拟数据对象的一个很好的理由;使用真实的东西,或创建一个new ArrayList<ILocation>
,填充它,并让你的模拟返回yourArrayList.iterator()
。