所以我在Android中制作了一个Contact Manager应用程序。我的教授给我们发了一个JUnit测试,以便我们知道我们的代码是否正常工作。现在每个方法都通过了测试,但迭代器测试没有通过测试。它似乎是一个 java.lang.AssertionError ,我似乎无法找到解决它的方法。如果你能看到错误并指出我会很棒。
提前致谢
答案 0 :(得分:0)
您尚未实施iterator(int)
方法
@Override
public Iterator<E> iterator(int index)
{
// TODO Auto-generated method stub
return new ListIterator<E>();
}
对索引做任何事情。所以在你的测试中
@Test
public void testIteratorInt() {
Iterator<String> iter = this.list.iterator(0);
assertTrue(iter.hasNext());
assertTrue(iter.next().equals("Amy"));
iter = this.list.iterator(2);
assertTrue(iter.hasNext());
assertTrue(iter.next().equals("Bob"));
}
返回的ListIterator
仍然开始指向第一个元素,而不是第三个元素,即Bob
。
你可以简单地向前移动迭代器两次然后测试
iter.next();
iter.next();
assertTrue(iter.next().equals("Bob"));
或者实际按照您的意愿实施iterator(int)
方法。
答案 1 :(得分:0)
错误来自testIteratorInt
中的第二个断言:
@Test
public void testIteratorInt() {
Iterator<String> iter = this.list.iterator(0);
assertTrue(iter.hasNext());
assertTrue(iter.next().equals("Amy"));
iter = this.list.iterator(2);
assertTrue(iter.hasNext());
assertTrue(iter.next().equals("Bob"));//ASSERT ERROR THROWN HERE
}
需要实现iterator(int index)
方法,以便在传入时将其设置为与上述单元测试相同的当前位置。这样的事情应该有效:
@Override
public Iterator<E> iterator(int index) {
ListIterator<E> iter = new ListIterator<E>();
iter.currentPosition = index;
return iter;
}
经过测试并在我的机器上工作。