2013-02-17 180 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方法,你必须检查他们是否服从合同。

现在这意味着:返回底层集合的下一个元素或抛出异常并告诉是否有后续元素。只需在你的迭代器上调用这些方法并声明结果即可。