Как JUnit проверить итератор

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

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

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

Спасибо.

Ответ 1

Несколько тестов, о которых я могу думать, следующие:

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

Вы также можете посмотреть тесты, используемые в openJDK.

Ответ 2

Нет.

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

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

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