Hi,
ich habe das Problem, dass ich das exakte Verhalten eines Iterator-Objektes nicht nachgestellt bekommen.
Hier das folgende Beispiel:
In der Methode in der ich den gemockten Iterator verwende, schlägt die Assertion fehl, da im Resultat nur "String 1String 2" steht. Die zweite For-each in buildString() wird also nicht ausgeführt bzw. der Iterator steht am Ende der Liste. Kann mir irgendjemand sagen wie man den Iterator wirklich korrekt mocken kann?
1000 Dank im Voraus.
Gruß
Jonny
ich habe das Problem, dass ich das exakte Verhalten eines Iterator-Objektes nicht nachgestellt bekommen.
Hier das folgende Beispiel:
Java:
public class IteratorTest {
@Test
public void unmocked() {
List<String> list = new LinkedList<String>() {
{
add("String 1");
add("String 2");
}
};
assertEquals("String 1String 2String 1String 2", buildString(list));
}
@Test
public void iteratorAndListMock() {
Iterator mockIter = mock(Iterator.class);
when(mockIter.hasNext()).thenReturn(true, true, false);
when(mockIter.next()).thenReturn("String 1", "String 2");
List<String> mockList = mock(List.class);
when(mockList.iterator()).thenReturn(mockIter);
assertEquals("String 1String 2String 1String 2", buildString(mockList));
}
private String buildString(List<String> list){
StringBuilder res = new StringBuilder();
for (String string : list) {
res.append(string);
}
for (String string : list) {
res.append(string);
}
return res.toString();
}
}
In der Methode in der ich den gemockten Iterator verwende, schlägt die Assertion fehl, da im Resultat nur "String 1String 2" steht. Die zweite For-each in buildString() wird also nicht ausgeführt bzw. der Iterator steht am Ende der Liste. Kann mir irgendjemand sagen wie man den Iterator wirklich korrekt mocken kann?
1000 Dank im Voraus.
Gruß
Jonny