[英]How to test remove element in linked list?
方法LinkedList#remove(int)
刪除 給定位置的元素(在您的情況下,索引為0
,因此是第一個元素),這里是其文檔 。
刪除后,所有其他元素移到最前面 (索引1
變為索引0
,依此類推)。 注意:由於LinkedList
的特性,因此無需支付額外費用。
有多種可能性可以測試正確性(例如,對於JUnit Test):
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
而是一個自己的實現,則可能需要根據您的文檔和需要對后面的示例進行一些修改。
您應該在以下所有情況下測試您的操作:
a
是否有價值。 希望這會有所幫助。
您只需在鏈表上調用size方法即可對其進行測試。 然后對鏈表的預期大小進行斷言。
assertEquals(EXPECTED_SIZE, list1.size())
預期大小將是一個整數值,該值將比初始大小小1個值。
要斷言是否刪除了實際值,您可以斷言包含
assertFalse(list1.contains(65))
65是已刪除的實際值。
其他答案都是正確的-但仍可能創建通過所有這些特定測試的錯誤列表實現-但其中包含一些晦澀的錯誤。
在這種情況下,基於QuickCheck想法的測試框架具有一定的優點。 與其手動編寫各種測試用例,不如指定對QuickCheck進行操作必須符合的規則/合同。 然后,框架創建隨機測試-當它發現違反您的規則的內容時,甚至會將輸入減少到顯示問題所需的“最低”要求。
我並不是說QuickCheck是這里的“更好”解決方案-但這絕對是其他答案所指向的測試類型的良好伴侶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.