使用Delphi IDE時,它會在填充各種屬性中的字段或表列表時將靜默地更改SQLConnection.Connected爲「true」。如何使Delphi DUnit測試在TSQLConnection.Connected = true時失敗
由於我不想用Connected = true進行發佈,因此當TSQLConnection.Connected在dfm中保持爲真時,我需要我的dunit測試失敗。
使用Delphi IDE時,它會在填充各種屬性中的字段或表列表時將靜默地更改SQLConnection.Connected爲「true」。如何使Delphi DUnit測試在TSQLConnection.Connected = true時失敗
由於我不想用Connected = true進行發佈,因此當TSQLConnection.Connected在dfm中保持爲真時,我需要我的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;
你可以寫你自己設爲TSQLConnection的後裔,不存儲其Connected屬性:
TdzAdoConnection = class(TADOConnection)
published
property Connected stored false;
end;
,並使用該組件,而不是設爲TSQLConnection。
(以上是TAdoConnection,但設爲TSQLConnection也應該可以正常工作。)
GExperts有我們配置到每個編譯關閉數據庫連接的「設置組件屬性」專家。既然這樣做,我們沒有問題。
OpenCTF - Delphi的組件測試框架可能很有趣,它會自動爲所有窗體/數據模塊中所有組件的指定屬性創建單元測試。它是開源的,易於使用。
「入門」文檔:http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf
的OpenCTF組件測試框架 有助於建立用於在Delphi應用程序的所有 (視覺的和非可視)VCL組件 自動測試。它基於DUnit框架基於 。
一些有用的例子:
Missing link: http://openctf.sourceforge.net/ – EMBarbosa 2014-06-21 13:37:29
另一種方法解決這個問題是實現一個pre-commit鉤子到你的供應鏈管理。我使用了TortoiseSVN,並且我做了類似的事情來防止偷偷摸摸的事情。例如,我們有一個「皮膚」庫,它試圖向在IDE中打開的任何表單添加大約十幾個皮膚單元。 (我們有一個註冊表補丁可以「修復」這種行爲,但如果開發人員重新安裝組件,它會每隔一段時間就會「未完成」)。所以我在SVN預提交鉤子的.ini文件中有一個「禁用的字符串列表」。
在我們的環境中,所有生產代碼都建立在專用的「生成機器」上,所以如果代碼沒有簽入,它不會生成生成。問題解決了。
甜,從來不知道存在。謝謝。 – TrevorD 2009-01-19 19:06:55