使用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