2016-12-19 4 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

Вы должны сообщить информацию о проблемном коде! Unittest выглядит отлично ... – 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

@Tophandour Исправить. Но то, что ведет ... плохое форматирование и все такое. Вот почему мои правки полностью сосредоточены на этой части. Сама ошибка не является настоящей вещью; но обстоятельства, вызвавшие эту ошибку. – GhostCat

+0

@HelpImInTrouble И для автоматического форматирования кода вы можете использовать горячую клавишу _Ctrl + Alt + L_ в Windows. Вы можете посмотреть ту же команду и для других ОС. – Gaket

Смежные вопросы