当使用德尔菲IDE,就会悄悄的变化和.连接到"真正的"填充的领域或表列出在各种特性。

因为我不想要释放与连接=true,我需要我述的测试失败时TSQLConnection.连接左真的在公司.

有帮助吗?

解决方案

我解决这个以另一种方式。我写了加载DFM文件的小工具,并寻找不应该存在的属性。包括database.connected =真值。

这可被修改与任何适当的属性工作。我已经把代码的核心也在这里。

为了使这个真正有用的,你应该在你的构建脚本(我用的FinalBuilder)使用这个工具。我的脚本,通过循环上.DFM文件,剥离这些属性开始,然后它编译并运行单元测试。如果他们通过,那么它continutes构建主应用程序。对我来说,这比一个单元测试失败,因为你可以从保证已知的好点开始了一个更好的办法。

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有我们配置到每个编译关闭数据库连接的“设置组件属性”专家。因为这样做,我们没有问题。

您可以编写自己设为TSQLConnection的后裔,不存储其Connected属性:

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

和使用该组件,而不是设为TSQLConnection。

(以上为TAdoConnection,但设为TSQLConnection也应该很好地工作。)

OpenCTF -组件的测试框架,用德尔菲可能是有趣的,它自动创建的单元测试指定性质的所有组成在所有形式/datamodules.它是开放源代码和易于使用。

"开始"文件: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

该OpenCTF组件的测试框架 有助于建立自动化测试的所有 (视觉和无视)VCL件 在德尔斐应用程序。这是基于 上述框架。

一些使用情况实例:

  • 检测丢失或错误的属性值--例如按钮未分配的行动、数据源没有相关数据集
  • 检测未分配的事件处理程序-例如失踪OnExecute事件
  • 检查所有数据集可以打开
  • 检查了标签
  • 找到看不见的部件(例如看不见的TabSheets其更好的应该是隐藏在运行时)

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

此问题的另一种方法是实现一个pre-commit钩子插入SCM。我使用TortoiseSVN,我也做过类似的事情,以防止在鬼鬼祟祟的事情。例如,我们有一个尝试添加了十几肌肤单位到您在IDE中打开的任何形式的“皮肤”库。 (我们已经有了一个注册表补丁“修复”这种行为,但在一段时间它得到“非做”每一次,如果开发人员重新安装组件)。所以我有一个.ini文件是在SVN pre-commit钩子一个“禁止字符串列表”。

在我们的环境中,所有的生产代码是建立一个专门的“构建机器”上,因此,如果代码没有得到签入,它不会使之成为构建。问题解决了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top