2016-12-19 72 views
-1

我是新來的JUnit測試,我掙扎,測試將針對特定車輛登記,並輸出它發現搜索的方法掙扎修復無限循環

System.out.println("getSpecificVehicle"); 
    CVMQueue instance = new CVMQueue(); 
    VehicleNode newVehicle = new VehicleNode("YBZ5484", "Car", "Ire", 3, 2.2); 
    instance.enqueue(newVehicle); 
    String expResult = "YBZ5484"; 
    String result = instance.getSpecificVehicle("YBZ5484"); 
    assertEquals(expResult, result); 

這是我的代碼它在控制檯中保持循環。

我該如何解決這個問題?

+2

什麼是'temp'?您發佈的代碼中沒有這樣的變量。 – toniedzwiedz

+1

你應該提供有關有問題的代碼的信息!單元測試看起來很好...... – Matthias

+2

你確定函數getSpecificVehicle(「YBZ5484」);應該返回與您提供的參數完全相同的值(是否應該返回「YBZ5484」而不是VehicleNode?)。有關每個函數做什麼的更多代碼是有幫助的,否則它主要是猜測。 –

回答

7

檢查您的代碼;如果你提高你的格式找到

while (temp != null) { 
... 
    if (reg.equalsIgnoreCase(temp.getRegNum())) { 
    ... 
    } 
} 

你的循環是從未改變溫度。那麼,爲什麼它會在進入後停止循環?所以,顯然你的問題是你錯過了閉環支撐;因爲你將該作業放在後面的temp 之後。

真正外賣這裏:

  1. 格式化事項。也許,如果你更加努力地寫下你的代碼,那麼你自己早就發現了這一點。正如Gaket指出的那樣:任何理智的IDE(或編碼編輯器)可能具有一些「自動格式」功能,那麼它就會自動格式化您的源代碼。
  2. 導致:代碼可讀性更重要。例如,有「單層抽象」原則;這會告訴你而不是只是把這個完整的,如果進入該循環;相反,你會創建一個方法來完成這項工作。而且,再次發現這個簡單的問題會容易得多。
  3. 瞭解如何使用調試器。你會發現,單元測試的真正威力在於它們使得它更容易隔離錯誤:你在某處放置了一個斷點;並在調試器中運行你的測試;你可以直接觀察發生了什麼。
+0

是的,它看起來像'temp = temp.getNext();'是爲了在while循環中,但他們意外地把它放在循環之外。 – Tophandour

+1

@Tondndour正確。但是,那裏的事情......糟糕的格式化和這樣的事情。這就是爲什麼我的編輯完全關注這一部分。錯誤本身並不是真實的東西。但造成這種錯誤發生的情況。 – GhostCat

+0

@HelpImInTrouble爲了自動格式化您的代碼,您可以在Windows中使用_Ctrl + Alt + L_熱鍵。您也可以爲其他操作系統查看相同的命令。 – Gaket