Здравствуйте, возникла необходимость сделать рефакторинг чужого кода + решил разобраться и освоить модульное тестирование.
В процессе возникло несколько вопросов:
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. Как тогда быть с обработкой исключения на уровне функции А ?
А если я захочу поймав исключение на самом нижнем уровне прекратить выполнение всех функций?
Заранее спасибо
