TSQLConnection.Connected = trueのときにDelphi DUnitテストを失敗させる方法
質問
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)
この問題に対する別のアプローチは、SCMに事前コミットフックを実装することです。私はTortoiseSVNを使用し、物事が潜入するのを防ぐために同様のことをしました。たとえば、<!> quot; skins <!> quot; IDEで開いたフォームに約12個のスキンユニットを追加しようとするライブラリ。 (<!> quot; fixes <!> quot;この動作を行うレジストリパッチがありますが、開発者が再びコンポーネントをインストールします)。 <!> quot;禁止文字列リスト<!> quot; SVN事前コミットフックにある.iniファイル内。
この環境では、すべてのプロダクションコードは専用の<!> quot; build machine <!> quot;でビルドされるため、コードがチェックインされない場合、ビルドに組み込まれません。問題は解決しました。