SortedArrayList中的Java.lang.AssertionError

时间:2014-03-09 05:44:31

标签: java android junit

所以我在Android中制作了一个Contact Manager应用程序。我的教授给我们发了一个JUnit测试,以便我们知道我们的代码是否正常工作。现在每个方法都通过了测试,但迭代器测试没有通过测试。它似乎是一个 java.lang.AssertionError ,我似乎无法找到解决它的方法。如果你能看到错误并指出我会很棒。

提前致谢

2 个答案:

答案 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;
}

经过测试并在我的机器上工作。