我正在Java中實現單向鏈接列表。我創建了一個名爲reverseList方法,反轉我的列表,例如:使用JUnit測試反轉單個鏈接列表的方法
頭 - > 1 - > 2 - > 3 - >空
變爲:
頭 - > 3 - > 2 - > 1 - >空
我還創建了一個測試類(使用JUnit),其具有稱爲testReverseList方法,其測試reverseList方法。 插入方法獲取數據以及您想要添加新節點的位置。所有這三種方法似乎都能正常工作。
public String reverseList() {
Node prev = null, current = head, next;
StringBuilder checkList = new StringBuilder();
while (current != null) {
checkList.append(current.getData());
next = current.getNext();
current.setNext(prev);
prev = current;
current = next;
}
head = prev;
return checkList.toString();
}
@Test
public void testReverseList() {
LinkedList myList = new LinkedList();
myList.insert(1, 1);
myList.insert(2, 2);
myList.insert(3, 3);
String normalListOrder = "123";
assertEquals("Check reverseList, reversing a list with 3 elements.", normalListOrder, myList.reverseList());
}
我的問題是:我不認爲我正確地使用我的附加節點的每個數據,然後返回它的這種方法測試我reverseList方法,因爲我不真正檢查它是否被逆轉。此外,看起來它需要更多的計算資源來完成所有這些。而且我不認爲在執行結束時返回true就足夠了。那麼,我應該不測試它嗎?有沒有更好的方法來做測試?
回答:謝謝大家。我遵循了Pelocho的建議並覆蓋了等於方法並更改了我的testReverseList和reverseList方法。我還創建了testEquals方法來檢查執行的是否等於。看來這是我想要的最好的方法。所有的測試都可以。
public LinkedList reverseList() {
Node prev = null, current = head, next;
while (current != null) {
next = current.getNext();
current.setNext(prev);
prev = current;
current = next;
}
head = prev;
return this;
}
public boolean equals(LinkedList myList) {
if (myList == this) {
return true;
}
if (!(myList.getListSize() == this.getListSize())) {
return false;
}
// Starts at 1 because retrieveNode pick the position, not index
for (int i = 1; i != this.getListSize(); i++) {
if (myList.retrieveNode(i).getData() != this.retrieveNode(i).getData()) {
return false;
}
}
return true;
}
@Test
public void testReverseList() {
LinkedList myList = new LinkedList();
myList.insert(1, 1);
LinkedList singleElementList = new LinkedList();
singleElementList.insert(1, 1);
assertEquals("Check reverseList, reversing a list with 1 element.", true, myList.reverseList().equals(singleElementList));
LinkedList expectedList = new LinkedList();
myList.insert(2, 2);
myList.insert(3, 3);
expectedList.insert(3, 1);
expectedList.insert(2, 2);
expectedList.insert(1, 3);
assertEquals("Check reverseList, reversing a list with 3 elements.", true, myList.reverseList().equals(expectedList));
}
public void testEquals() {
LinkedList myList = new LinkedList();
myList.insert(1, 1);
assertEquals("Check reverseList, comparing to the same list.", true, myList.reverseList().equals(myList));
LinkedList myList2 = new LinkedList();
myList2.insert(1, 1);
myList2.insert(2, 2);
assertEquals("Check reverseList, different size list.", false, myList.reverseList().equals(myList2));
}
我想你的問題是[codereview](https://codereview.stackexchange.com)。 – Sergii
您的斷言正在驗證您**沒有**反轉列表。例如。你聲明'reverseList()'方法返回的順序仍然是原來的順序...... –