Как сделать тест Delphi DUnit неудачным, когда TSQLConnection.Connected = true - PullRequest
8 голосов
/ 19 января 2009

При использовании Delphi IDE он автоматически изменит SQLConnection.Connected на "true" при заполнении списков полей или таблиц в различных свойствах.

Так как я не хочу выпускать с Connected = true, мне нужно, чтобы мой тест dunit не прошел, когда TSQLConnection.Connected оставлено в true в dfm.

Ответы [ 5 ]

9 голосов
/ 19 января 2009

GExperts имеет эксперта «Set Component Properties», который мы настраиваем для закрытия соединений с базой данных при каждой компиляции. С тех пор у нас не было проблемы.

5 голосов
/ 19 января 2009

Вы можете написать своего собственного потомка TSQLConnection, который не хранит свое свойство Connected:

  TdzAdoConnection = class(TADOConnection)
  published
    property Connected stored false;
  end;

и используйте этот компонент вместо TSqlConnection.

(Выше указано для TAdoConnection, но TSQLConnection также должен нормально работать.)

4 голосов
/ 19 января 2009

Я решаю это по-другому. Я написал небольшую утилиту, которая загружает файл DFM и ищет свойства, которые не должны присутствовать. Включая database.connected = true values.

Это можно изменить для работы с любыми подходящими свойствами. Я также поместил здесь ядро ​​кода.

Чтобы сделать это действительно полезным, вы должны использовать эту утилиту в своем скрипте сборки (я использую 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;
1 голос
/ 14 марта 2010

OpenCTF - Компонент Framework Test Framework для Delphi может быть интересен, он автоматически создает модульные тесты для указанных свойств всех компонентов во всех формах / модулях данных Это с открытым исходным кодом и прост в использовании.

Документ «Начало работы»: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

Каркас тестирования компонентов OpenCTF помогает строить автоматические тесты для всех (визуальные и не визуальные) компоненты VCL в приложении Delphi. Основано на платформе DUnit.

Некоторые примеры использования:

  • обнаружить отсутствующие или неправильные значения свойств - например, Кнопки без назначенных действий, источники данных без связанного набора данных
  • обнаруживать неназначенные обработчики событий - например, отсутствует событие OnExecute
  • проверить, что все наборы данных могут быть открыты
  • проверить порядок вкладок
  • найти невидимые компоненты (например, невидимые табличные таблицы, которые лучше скрыть во время выполнения)

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

0 голосов
/ 01 ноября 2011

Другой подход к этой проблеме - внедрить хук до фиксации в ваш SCM. Я использую TortoiseSVN, и я сделал аналогичные вещи, чтобы предотвратить проникновение. Например, у нас есть библиотека «скинов», которая пытается добавить около дюжины скинов к любой форме, которую вы открываете в IDE. (У нас есть исправление реестра, которое «исправляет» это поведение, но оно время от времени «не выполняется», если разработчик переустанавливает компоненты). Итак, у меня есть «список запрещенных строк» ​​в INI-файле, который находится в хуке предварительной фиксации SVN.

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

...