2013-02-17 182 views
11

例如,我怎麼測試:如何JUnit測試一個迭代器

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

如何測試這個「iterator()」的方法?

謝謝。

+0

爲什麼要測試'iterator()'? – m0skit0 2013-02-17 10:43:08

+1

我爲我的一個類編寫了自己的迭代器,我想測試關於該迭代器的所有內容(可能是next(),hasNext()...空案例) – 2013-02-17 10:44:31

回答

17

我能想到的幾個測試:

  • 上的空白收集測試hasNext(返回false)的next()在一個空的集合
  • 測試(拋出異常)上
  • 測試hasNext帶有一個項目的集合(返回true,多次)
  • 測試hasNext/next對於具有一個項目的集合:hasNext返回true,next返回項目,hasNext返回false,兩次
  • test在該col上移除經文:檢查大小爲0後
  • 測試再次刪除:與一些項目的集合例外
  • 最終測試,確保迭代器經過每一個項目,以正確的順序(如果有的話)
  • 刪除來自集合的所有元素:集合現在是空的

你也可以看看the tests used in openJDK

+0

以添加到此綜合響應中。另一個測試可以是:當迭代器在列表中迭代時,同時更改列表元素的同時檢查異常,如「ConcurrentModificationException」。 – 2017-10-03 00:35:44

3

你不知道。

甲骨文和太陽的夥計們已經這樣做了。

如果你創建自己的迭代器實現,那麼你必須實現AFAIR 2方法,你必須檢查他們是否服從合同。

現在這意味着:返回底層集合的下一個元素或拋出異常並告訴是否有後續元素。只需在你的迭代器上調用這些方法並聲明結果即可。