Показать сообщение отдельно
  #1  
Старый 25.06.2012, 20:26
Wiali Wiali вне форума
Прохожий
 
Регистрация: 25.06.2012
Сообщения: 3
Репутация: 10
По умолчанию Пара вопросов по тестированию и рефакторингу

Здравствуйте, возникла необходимость сделать рефакторинг чужого кода + решил разобраться и освоить модульное тестирование.

В процессе возникло несколько вопросов:

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. Как тогда быть с обработкой исключения на уровне функции А ?

А если я захочу поймав исключение на самом нижнем уровне прекратить выполнение всех функций?


Заранее спасибо
Ответить с цитированием