答案 0 :(得分:2)
方法LinkedList#remove(int)
移除 给定位置的元素(在您的案例索引0
中,所以第一个元素),这里是它的documentation。
删除后,所有其他元素移到前面(索引1
变为索引0
,依此类推)。作为备注:由于LinkedList
的性质,这不需要额外费用。
测试正确性有几种可能性(例如,对于JUnit测试):
null
以下是所有提到的案例的一些实现:
@Test
public void testSizeChange() {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
Assert.assertEquals(5, list.size());
list.remove(0);
Assert.assertEquals(4, list.size());
}
@Test
public void testRemovedCorrectElement() {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
Assert.assertTrue(list.contains(1));
list.remove(0);
Assert.assertFalse(list.contains(1));
}
@Test
public void testElementsMoved() {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
list.remove(0);
Iterator<Integer> iter = list.iterator();
for (int i = 2; i <= 5; i++) {
Assert.assertTrue(iter.hasNext());
Assert.assertEquals(i, iter.next());
}
Assert.assertFalse(iter.hasNext());
}
@Test
public void testReturnRemovedValue() {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
Assert.assertEquals(1, list.remove(0));
}
@Test(expected = IndexOutOfBoundsException.class)
public void testHandleEmpty() {
LinkedList<Integer> list = new LinkedList<>();
list.remove(0);
}
@Test
public void testRemoveNull() {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(null, 2, 3, 4, 5));
Assert.assertNull(list.remove(0));
}
请注意,如果您的LinkedList
不是java.util.LinkedList
,而是自己的实施,则可能需要根据您的文档和需要稍微修改后面的示例。
答案 1 :(得分:2)
您应该在以下所有情况下测试您的操作:
a
是否有价值。希望它会有所帮助。
答案 2 :(得分:0)
您只需在链接列表上调用size方法即可对其进行测试。然后对链表的预期大小进行断言。
assertEquals(EXPECTED_SIZE, list1.size())
预期大小将是一个int值,它比初始大小小1。
要断言是否删除了实际值,您可以在包含
上断言assertFalse(list1.contains(65))
这里65是已删除的实际值。
答案 3 :(得分:0)
其他答案都是正确的 - 但仍然可以创建一个错误的列表实现,通过所有这些特定的测试 - 但包含一些模糊的错误。
这是基于QuickCheck想法的测试框架具有某些优点的场景。而不是手动编写各种测试用例 - 而是指定规则/合同,对于QuickCheck的操作必须为true。然后框架创建随机测试 - 当它发现违反规则的内容时,它甚至会减少对最小值的输入。需要显示问题。
我不是说QuickCheck是&#34;更好&#34;解决方案 - 但它绝对是其他答案指向您的测试类型的良好伴侣。