|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Пара вопросов по тестированию и рефакторингу
Здравствуйте, возникла необходимость сделать рефакторинг чужого кода + решил разобраться и освоить модульное тестирование.
В процессе возникло несколько вопросов: 1. DUnit; 1.1. Стандартный кодогенератор создает шаблон теста так, что если тестируешь класс, то на тест идут только public методы. Понятно, почему: методы тестирования работают с объектом класса, которому доступны только паблик методы. Но ошибки могут быть и в приватных методах, как быть? 1.2. Предположим, класс DBConnector содержит два метода (процедуры), которые инкапсулируют внутри множество методов. Код:
procedure GetAuthenticationData; procedure ConnectByDataBase; Т.е. после GetAuthenticationData изменяются поля класса и ConnectByDataBase использует эти значения для своей работы. Как тогда протестировать отдельно тот же ConnectByDataBase, которая работает с приватными полями класса? 2. Рефакторинг 2.1. Есть события formcreate, ontimer и часть других методов, которые отвечают за инициализацию данных и вызываются в разное время. Я так понимаю, лучшее решение воспользоваться паттерном "одиночка" и инициализировать данные как: singleton.getInstance.egg1,singleton.getInstance.e gg2 и т.д. ? 2.2. Обработка исключений на разных уровнях вложенности функций. Я просто запутался. Вот к примеру есть такая ситуация ( я сознательсно опускаю некоторые элементы синтаксиса: Код:
function A; begin try function B; except on ExceptionFromB end function B; begin try function C; //некоторый код, который поднимает исключение ExceptionFromB except on ExceptionFromC end function C; begin //некоторый код, который поднимает исключение ExceptionFromC end Bargest: оформляем код тегами [ code] [ /code]! Нормальная ли такая конструкция где в функции B и вызывается функция C и поднимается исключение, которое будет обработано на уровне функции А. + тут такая ситуация, что если будет поднято исключение ExceptionFromC, то даже в случае того, если будет поднято ExceptionFromB, будет обработано только ExceptionFromC на уровне функции B. Как тогда быть с обработкой исключения на уровне функции А ? А если я захочу поймав исключение на самом нижнем уровне прекратить выполнение всех функций? Заранее спасибо Последний раз редактировалось Bargest, 25.06.2012 в 20:51. |