Как сделать так, чтобы тест Delphi DUnit завершился неудачей, когда TSQLConnection.Connected = true

StackOverflow https://stackoverflow.com/questions/457363

  •  19-08-2019
  •  | 
  •  

Вопрос

При использовании 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
  • проверьте, что все наборы данных могут быть открыты
  • проверьте порядок вкладок
  • найти невидимые компоненты (например.невидимые таблицы вкладок, которые лучше скрывать во время выполнения)

OpenCTF http://www.mikejustin.com/images/OpenCTF.gif

Другой подход к этой проблеме - внедрить хук до фиксации в ваш SCM. Я использую TortoiseSVN, и я сделал подобные вещи, чтобы предотвратить проникновение вещей. Например, у нас есть & Quot; skins & Quot; библиотека, которая пытается добавить около дюжины скинов к любой форме, которую вы открываете в IDE. (У нас есть исправление реестра, которое & Quot; исправляет & Quot; такое поведение, но оно получает & Quot; un-done & Quot; время от времени, если разработчик повторно устанавливает компоненты). Итак, у меня есть & Список запрещенных строк & Quot; в файле .ini, который находится в хуке предварительной фиксации SVN.

В нашей среде весь производственный код создается на выделенном " сборочном компьютере " поэтому, если код не будет зарегистрирован, он не попадет в сборку. Проблема решена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top