2013-02-17 3 views
11

Например, как я могу проверить:Как JUnit проверить итератор

ArrayList<String> list = new ArrayList<String>(); 
list.iterator(); 

Как проверить это «iterator()» метод?

Спасибо.

+0

Почему вы хотите протестировать 'итератор()'? – m0skit0

+1

Я написал свой собственный итератор для одного из моих классов, и я хочу проверить все об этом итераторе (возможно, next(), hasNext() ... empty case stuff) –

ответ

17

Несколько тестов я могу думать о том, являются:

  • тест hasNext на пустую коллекции (возвращает ложный) тест
  • следующим() на пустой коллекции (бросает исключение)
  • теста hasNext на коллекция с одним элементом (возвращает true, несколько раз)
  • test hasNext/next в коллекции с одним элементом: hasNext возвращает true, next возвращает элемент, hasNext возвращает false, дважды
  • тест удалить из этого col разночтение: размер проверка 0 после
  • теста удалить снова: исключение
  • окончательного тест с коллекцией с несколькими деталями, то убедитесь, что итератор проходит через каждый пункт, в правильном порядке (если есть один)
  • удалить все элементы из коллекции: теперь коллекция пуста

Вы также можете посмотреть the tests used in openJDK.

+0

, чтобы добавить к этому всеобъемлющему ответу. другим тестом может быть: проверка исключения, например 'ConcurrentModificationException', когда элементы списка изменяются одновременно, итератор итерации в списке. –

3

У вас нет.

Ребята из оракула и солнца уже сделали это.

Если вы создаете свою собственную реализацию итератора, тогда вам нужно реализовать методы AFAIR 2, и вам нужно проверить, подчиняются ли они контракту.

Теперь это означает: возврат следующего элемента базовой коллекции или выдача исключения и указание наличия последующих элементов. Просто вызовите эти методы на своем итераторе и подтвердите результат.