Задание 4. Написание тестовой процедуры для класса Department
В этом задании вы включите код из процедуры, написанной во время выполнения предыдущего задания, в новую процедуру для тестирования класса Department. Поскольку класс Department содержит экземпляры класса Employee, вам потребуется прочитать данные из файла для инициализации экземпляров класса Employee, как вы делали ранее. Вы напишите инструкции для тестирования конструктора и каждого метода класса Department и используете оператор message для записи данных в файл.
В каталоге Sandbox/Test сделайте копию файла TestEmployee.p и назовите её TestDepartment.p.
- Щёлкните правой кнопкой мыши по файлу TestEmployee.p и выберите пункт меню Copy.
- Щёлкните правой кнопкой мыши по каталогу Sandbox/Test и выберите пункт меню Paste.
- Введите новое имя файла TestDepartment.p.
- Щёлкните по кнопке OK.
Откройте файл TestDepartment.p и измените комментарий в начале файла, заменив Employee на Department.
В этой процедуре вы создадите экземпляры Employee и Department. Добавьте оператор using в начало этого файла для класса Department.
using Sandbox.TestClass.Department.
Добавьте описание переменной Dept, которое представляет тип Department. Эта переменная будет хранить ссылку на создаваемый вами экземпляр Department.
- Установите курсор на новую строку после описания переменной Emp.
- Добавьте следующий код:
define variable Dept as Department no-undo.
Измените имя файла, в который будут записываться данные, на TestDepartment.txt.
output to value ("C:\OpenEdge\WRK\TestDepartement.txt").
После оператора output добавьте оператор создания экземпляра Department, предоставив три входных параметра необходимых конструктору. В данном случае мы укажем их как жёстко закодированные значения. Где название департамента будет «Department#1», код расходов 777 и количество сотрудников 10. Присвойте ссылку на это экземпляр переменной Dept.
Dept = new Department (input "Department#1", input 10, input "777").
Следующий код для создания экземпляра Employee, присвоения номеров телефонов и вызов метода Initialize() оставьте без изменений.
Emp = new Employee(). assign Phones[1] = "921 321 15 90" Phones[2] = "921 421 35 30" Phones[3] = "921 758 25 41" . Emp:Initialize(input 1001, input "Иван", input "Иванов", input "Невский 123", input "02067-2294", input Phones, input 40, input "Торговый представитель").
После вызова Initialize() вызовите метод AddEmployee(), указав ссылку на только что созданный экземпляр Employee. Добавьте следующий код после первого вызова Emp:Initialize():
Dept:AddEmployee(input Emp).
Удалите операторы, в которых вы записываете данные, используя оператор message для экземпляра Employee, удаления экземпляра Employee и создния нового экземпляра Employee, потому что вы будете создавать экземпляр в методе AddEmployee().
Вы должны удалить следующий код:
message Emp:GetInfo() skip. delete object Emp. Emp = new Employee().
Вместо создания экземпляра класса Employee в этой процедуре вы сделаете это с помощью метода AddEmployee(). Сохраните оператор присвоения номеров телефонов, но замените оператор для инициализации экземпляра Employee вызовом AddEmployee(), предоставляя все необходимые параметры, как вы делали это для инициализации второго экземпляра класса Employee.
- Сохраните оператор assign для Phones.
- Замените оператор Emp:Initialize() для инициализации экземпляра Employee вызовом AddEmployee() следующим образом:
Dept:AddEmployee(input 1001, input "Пётр", input "Петров", input "Московский 12", input "01458-7589", input Phones, input 40, input "Торговый представитель").
После вызова AddEmployee() для добавления и создания второго экземпляра Employee, добавьте оператор message для записи в файл возвращённого значения методом GetLastEmployeeNumber() вызываемого для экземпляра Departement. Добавьте следующий код после вызова AddEmployee():
message "Последний номер сотрудника в департаменте: " Dept:GetLastEmployeeNumber() skip.
Далее добавьте оператор message для записи в файл значения, возвращённого методом NumberEmployees() вызываемого для экземпляра Departement.
message "Количество сотрудников в департаменте: " Dept:NumberEmployee() skip.
Добавьте оператор присвоения переменной Emp значения, возвращённого методом GetEmployee() вызываемого для экземпляра Department с передачей 1 в качестве параметра. Затем используйте метод GetInfo() для вывода информации о сотруднике в файл с помощью оператора message.
Emp = Dept:GetEmployee(1). message Emp:GetInfo() skip.
Добавьте оператор присвоения переменной Emp значения, возвращённого методом GetEmployee() вызываемого для экземпляра Department с передачей 2 в качестве параметра. Затем используйте метод GetInfo() для вывода информации о сотруднике в файл с помощью оператора message.
Emp = Dept:GetEmployee(2). message Emp:GetInfo() skip.
Добавьте оператор удаления экземпляра Department. Деструктор этого класса также выполнит удаление экземпляров Employee.
delete object Dept.
Оставшиеся операторы в этой процедуре должны быть output close и return. Удалите другие операторы, сохраните файл и убедитесь, что компиляция прошла без ошибок.
Вы должны удалить следующие операторы:
Emp:SetVacationHours(input 100). message Emp:GetInfo() skip. delete object Emp.
Листинг программы TestDepartment.p
/* *************************** Definitions ************************** */ using Sandbox.TestClass.Employee. using Sandbox.TestClass.Department. block-level on error undo, throw. define variable Phones as character extent 3 no-undo. define variable Emp as Employee no-undo. define variable Dept as Department no-undo. /* *************************** Main Block *************************** */ output to value ("C:\OpenEdge\WRK\TestDepartement.txt"). Dept = new Department (input "Department#1", input 10, input "777"). Emp = new Employee(). assign Phones[1] = "921 321 15 90" Phones[2] = "921 421 35 30" Phones[3] = "921 758 25 41" . Emp:Initialize( input 1001, input "Иван", input "Иванов", input "Невский 123", input "02067-2294", input Phones, input 40, input "Торговый представитель"). Dept:AddEmployee(input Emp). assign Phones[1] = "931 123 51 09" Phones[2] = "931 124 53 03" Phones[3] = "931 857 52 14" . Dept:AddEmployee(input 1001, input "Пётр", input "Петров", input "Московский 12", input "01458-7589", input Phones, input 40, input "Торговый представитель"). message "Последний номер сотрудника в департаменте: " Dept:GetLastEmployeeNumber() skip. message "Количество сотрудников в департаменте: " Dept:NumberEmployee() skip. Emp = Dept:GetEmployee(1). message Emp:GetInfo() skip. Emp = Dept:GetEmployee(2). message Emp:GetInfo() skip. delete object Dept. output close.