TSQLConnection.Connected = trueのときにDelphi DUnitテストを失敗させる方法

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

  •  19-08-2019
  •  | 
  •  

質問

Delphi IDEを使用する場合、SQLConnection.Connectedを<!> quot; true <!> quot;にサイレントに変更します。さまざまなプロパティのフィールドリストまたはテーブルリストに入力する場合。

Connected = trueでリリースしたくないので、dfmでTSQLConnection.Connectedがtrueのままになっている場合、dunitテストが失敗する必要があります。

役に立ちましたか?

解決

これを別の方法で解決します。 DFMファイルをロードし、存在してはならないプロパティを探す小さなユーティリティを作成しました。 database.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には<!> quot; Set Component Properties <!> quot;があります。コンパイルごとにデータベース接続を閉じるように設定するエキスパート。それ以来、問題は発生していません。

Connectedプロパティを保存しないTSQLConnectionの独自の子孫を作成できます。

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

TSqlConnectionではなくそのコンポーネントを使用します。

(上記はTAdoConnectionの場合ですが、TSQLConnectionも正常に機能するはずです。)

OpenCTF -Delphiのコンポーネントテストフレームワークは興味深いかもしれません。指定されたプロパティのユニットテストを自動的に作成しますすべてのフォーム/データモジュールのすべてのコンポーネント。オープンソースで使いやすい。

<!> quot;はじめに<!> quot;ドキュメント: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

  

OpenCTFコンポーネントテストフレームワーク   すべての自動テストを構築するのに役立ちます   (視覚および非視覚)VCLコンポーネント   Delphiアプリケーションで。基づいています   DUnitフレームワーク上。

使用例:

  • 欠落または誤ったプロパティ値を検出-例割り当てられたアクションのないボタン、関連付けられたデータセットのないデータソース
  • 未割り当てのイベントハンドラーの検出-例OnExecuteイベントがありません
  • すべてのデータセットを開くことができることを確認します
  • タブの順序を確認
  • 不可視のコンポーネントを見つける(例:実行時に非表示にする必要のある不可視のTabSheets)

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

この問題に対する別のアプローチは、SCMに事前コミットフックを実装することです。私はTortoiseSVNを使用し、物事が潜入するのを防ぐために同様のことをしました。たとえば、<!> quot; skins <!> quot; IDEで開いたフォームに約12個のスキンユニットを追加しようとするライブラリ。 (<!> quot; fixes <!> quot;この動作を行うレジストリパッチがありますが、開発者が再びコンポーネントをインストールします)。 <!> quot;禁止文字列リスト<!> quot; SVN事前コミットフックにある.iniファイル内。

この環境では、すべてのプロダクションコードは専用の<!> quot; build machine <!> quot;でビルドされるため、コードがチェックインされない場合、ビルドに組み込まれません。問題は解決しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top