【问题标题】:How to JUnit test a iterator如何 JUnit 测试迭代器
【发布时间】:2013-02-01 22:20:44
【问题描述】:

例如,我该如何测试:

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

如何测试这个“iterator()”方法?

谢谢。

【问题讨论】:

  • 为什么要测试iterator()
  • 我为我的一个班级编写了自己的迭代器,我想测试有关该迭代器的所有内容(可能是 next()、hasNext()...空案例)

标签: java unit-testing testing junit


【解决方案1】:

我能想到的几个测试是:

  • 在空集合上测试 hasNext(返回 false)
  • 在空集合上测试 next()(抛出异常)
  • 在一个包含一个项目的集合上测试 hasNext(多次返回 true)
  • 在包含一个项目的集合上测试 hasNext/next:hasNext 返回 true,next 返回项目,hasNext 返回 false,两次
  • 对该集合进行测试删除:检查大小为 0 之后
  • 再次测试删除:异常
  • 对包含多个项目的集合进行最终测试,确保迭代器以正确的顺序遍历每个项目(如果有的话)
  • 从集合中移除所有元素:集合现在是空的

你也可以看看the tests used in openJDK

【讨论】:

  • 添加到这个全面的响应中。另一个测试可以是:在迭代器在列表上迭代时同时更改列表元素时检查 ConcurrentModificationException 之类的异常。
【解决方案2】:

你没有。

来自 oracle 和 sun 的人已经这样做了。

如果您创建自己的迭代器实现,那么您必须实现 AFAIR 2 方法,并且您必须检查它们是否遵守合同。

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

【讨论】:

  • 你应该删除这个答案,@piotrek:问题是关于测试实现Iterator 的类,而不是关于测试Iterator 本身。此外,测试Iterator 本身是不可能的,因为它是interface
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多