Задание 3. Тестирование и отладка класса Employee
В этом задании вам необходимо проверить работу класса Employee c помощью процедуры тестирования, которую вы подготовили ранее, и с помощью отладчика по шагам пройти через код чтобы увидеть, как изменяются значения переменных по мере его выполнения.
Попробуйте выполнить процедуру TestEmployee.p, для этого:
- откройте файл в редакторе Developer Studio и щёлкните по иконке Run;
- выберите Progress OpenEdge Application;
- щёлкните OK;
- проверьте содержимое файла TestEmployee.txt.
Далее выполните процедуру тестирования в отладчике и по шагам пройдите по коду для проверки значений. Перед запуском процедуры в отладчике необходимо установить хотя бы одну точку останова чтобы работа кода остановилась на ней в отладчике. В фале TestEmployee.p установите точку останова на операторе, с помощью которого создаётся первый экземпляр класса Employee:
- установите курсор в любом месте на строке, в которой создаётся экземпляр Employee;
- щёлкните правой кнопкой мыши и затем выберите пункт Toggle Breakpoint. В поле с левой стороны от строки должна появиться точка, которая указывает, что в этой строке установлена точка останова.
Примечание: точку останова можно установить двойным щелчком мыши в поле с левой стороны от строки.
Теперь выполните процедуру TestEmployee.p в режиме отладчика:
- Щёлкните по иконке Debug. Если это первый запуск отладчика, то вы получите сообщение с предложением открыть перспективу отладчика. Установите флаг Remember my decision и щёлкните по кнопке Switch.
- После переключения в режим отладчика работа процедуры должна остановиться на точке останова.
Щёлкните по вкладке Variables. Вы должны увидеть, что переменная Emp имеет значение ?, то есть неопределённое или неизвестное. Также элементы массива Phones тоже не должны иметь значений.
Перешагните через следующий оператор после точки останова. Для этого щёлкните по кнопке Step Over со значком .
Отладчик остановится на следующем операторе в тестовой процедуре. Обратите внимание, что переменная Emp теперь получила значение – это ссылка на только что созданный экземпляр класса Employee.
Сделайте один шаг через оператор Assign (), и вы увидите, что элементы массива Phones тоже получили значения. Соответствуют эти значения ожидаемым?
Следующий оператор вызывает метод Initialize() для экземпляра Employee. Выполните этот метод, а не перешагивайте через него (кнопка Step Into с иконкой ). Обратите внимание, что отладчик теперь находится внутри кода метода Initialize() класса Employee. Обратите также внимание, что теперь показаны переменные метода Initialize(), а не вашей процедуры тестирования. Свойства не имеют значений, поскольку оператор assign ещё не выполнен.
Перешагните через оператор assign () в методе Initialize(). Оператор assign присвоит значения каждому свойству в экземпляре на основе значений входных параметров. Но значение для свойства PostalCode не установлено. Если вы посмотрите на код Employee.cls, вы заметите, что реализация set() для этого свойства не имеет тела. Мы дополним этот код позже и повторим тестирование.
Перешагните через оператор return () для возврата в тестовую процедуру или щёлкните по иконке Step Return (
) для возврата в вызывающую процедуру.
Запомните значение ссылки на объект Emp в разделе переменных.
Перешагните оператор message ().
Перешагните оператор удаления объекта и обратите внимание, что после удаления экземпляра, значение Emp стало неопределённым.
Перешагните следующий оператор создания экземпляра Employee. Обратите внимание, что переменная Emp получила новое значение, которое представляет собой новую ссылку на объект экземпляра, который только что создал отладчик.
Установите ещё одну точку прерывания на следующем операторе message, который должен записать в файл информацию из второго экземпляра Employee.
Щёлкните по иконке Resume () для продолжения выполнения кода до следующей точке прерывания. Отладчик должен остановиться на операторе message. Разверните переменную Emp во вкладке переменных чтобы посмотреть данные экземпляра Employee. Эти данные содержат ожидаемые значения всех свойств, кроме PostalCode, полученные вызовом метода Initialize() и SetVacationHours().
Продолжите выполнение кода () до его завершения. Проверьте файл TestEmployee.txt и вернитесь в перспективу OpenEdge Editor.
Поскольку свойство PostalCode класса Employee не установлен должным образом, как вы видели во время отладки, мы добавим в метод доступа PostalCode set() код для установки этого значения:
define public property PostalCode as character no-undo get. set(input arg as character): PostalCode = arg. end set.
После внесения изменений выполните тестовую процедуру и проверьте файл TestEmployee.txt, который теперь должен содержать почтовый код.