2016-06-01 4 views
0

У меня есть этот код Java, который включает в себя интерфейс.Mock for loop with interface

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"); 

Я никогда не проникал де цикл

+0

Вы пишете свой собственный итератор? Если бы вы могли поделиться этим кодом? Если нет, можете ли вы издеваться над 'fileSystem.getContactLocations()', чтобы вернуть правильный объект 'ILocation', чтобы вам не нужно было издеваться над итератором? – FriedSaucePots

ответ

0

Вы не правильно издевались другой важный метод итератора, hasNext. По умолчанию Mockito возвращает false для всех методов с булевым вводом, поэтому hasNext всегда будет ложным, и вы никогда не войдете в цикл for.

Это отличная причина не издеваться над объектами данных, как большинство Iterables; используйте реальную вещь или создайте new ArrayList<ILocation>, заполните ее и верните yourArrayList.iterator().