Как сделать так, чтобы тест Delphi DUnit завершился неудачей, когда TSQLConnection.Connected = true
Вопрос
При использовании Delphi IDE он автоматически меняет SQLConnection.Connected на «true» при заполнении списков полей или таблиц в различных свойствах.
Поскольку я не хочу выпускать версию с Connected = true, мне нужно, чтобы мой тест dunit завершился неудачей, когда TSQLConnection.Connected остается истинным в dfm.
Решение
Я решаю это другим способом.Я написал небольшую утилиту, которая загружает файл DFM и ищет свойства, которых не должно быть.Включая значения data.connected = true.
Это можно изменить для работы с любыми подходящими свойствами.Я также поместил сюда ядро кода.
Чтобы сделать это действительно полезным, вам следует использовать эту утилиту в своем сценарии сборки (я использую FinalBuilder).Мой сценарий начинается с цикла обработки файлов .dfm, удаления всех этих свойств, а затем компилируется и запускает модульные тесты.Если они пройдут, то продолжается сборка основного приложения.На мой взгляд, это лучший способ, чем провалить модульный тест, поскольку вы можете начать с гарантированно известной хорошей точки.
nState := 0;
bFound := False;
for nFileLoop := 0 to memoFile.Lines.Count - 1 do
begin
szLine := memoFile.Lines[nFileLoop];
case nState of //
0:
begin
if(0 <> Pos('TADOConnection', szLine)) then
begin
szSeeking := 'Connected';
nState := 1;
end
else if(0 <> Pos('TADOTable', szLine)) then
begin
szSeeking := 'Active';
nState := 1;
end
else if(0 <> Pos('TADOQuery', szLine)) then
begin
szSeeking := 'Active';
nState := 1;
end
else if(0 <> Pos('TDBISAMTable', szLine)) then
begin
szSeeking := 'Active';
nState := 1;
end
else if(0 <> Pos('TDBISAMDatabase', szLine)) then
begin
szSeeking := 'Connected';
nState := 1;
end
else if(0 <> Pos('TDBISAMSession', szLine)) then
begin
szSeeking := 'Active';
nState := 1;
end
else if(0 <> Pos('TDBISAMQuery', szLine)) then
begin
szSeeking := 'Active';
nState := 1;
end;
end;
1 :
begin
bFound := True;
if(0 <> Pos('end', szLine)) then
begin
nState := 0;
end
else if(0 <> Pos(szSeeking, szLine)) then
begin
nPos := Pos('=', szLine);
if nPos > 0 then
begin
memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False';
end;
end;
end;
end; // case
end;
Другие советы
GExperts имеет " Установить свойства компонента " эксперт, который мы настраиваем для закрытия соединений с базой данных при каждой компиляции. С тех пор у нас не было проблемы.
Вы можете написать своего собственного потомка TSQLConnection, который не хранит свое свойство Connected:
TdzAdoConnection = class(TADOConnection)
published
property Connected stored false;
end;
и используйте этот компонент, а не TSqlConnection.
(Выше указано для TAdoConnection, но TSQLConnection также должен нормально работать.)
OpenCTF - Платформа тестирования компонентов для Delphi может быть интересной, она автоматически создает модульные тесты для указанных свойств всех компонентов во всех формах/модулях данных.Это открытый исходный код и простой в использовании.
Документ «Начало работы»: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf
Среда тестирования компонентов OpenCTF помогает создать автоматические тесты для всех (визуальных и невизуальных) компонентов VCL в приложении Delphi.Он основан на на фреймворке DUnit.
Некоторые примеры использования:
- обнаружить отсутствующие или неправильные значения свойств - например.Кнопки без назначенных действий, источники данных без связанного набора данных.
- обнаружить неназначенные обработчики событий - например.отсутствует событие OnExecute
- проверьте, что все наборы данных могут быть открыты
- проверьте порядок вкладок
- найти невидимые компоненты (например.невидимые таблицы вкладок, которые лучше скрывать во время выполнения)
Другой подход к этой проблеме - внедрить хук до фиксации в ваш SCM. Я использую TortoiseSVN, и я сделал подобные вещи, чтобы предотвратить проникновение вещей. Например, у нас есть & Quot; skins & Quot; библиотека, которая пытается добавить около дюжины скинов к любой форме, которую вы открываете в IDE. (У нас есть исправление реестра, которое & Quot; исправляет & Quot; такое поведение, но оно получает & Quot; un-done & Quot; время от времени, если разработчик повторно устанавливает компоненты). Итак, у меня есть & Список запрещенных строк & Quot; в файле .ini, который находится в хуке предварительной фиксации SVN. Р>
В нашей среде весь производственный код создается на выделенном " сборочном компьютере " поэтому, если код не будет зарегистрирован, он не попадет в сборку. Проблема решена.