代码测试:如何在不重新编译的情况下添加测试代码?

时间:2012-12-11 02:21:06

标签: delphi unit-testing automated-tests build-automation delphi-2010

我有原始的测试框架(sort-of)在我的情况下运行得很好。

它基本上是一个特殊的测试单元,在项目的主要形式中是$ INCLUDEd。

例如,假设我的主要表单如下所示:

unit start;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ...;

type
  {$ifdef CodeTest}
  TFileOperation = (fpDelete, fpModify, fpRename);
  {$endif}

  TMainForm = class(TdxRibbonForm)
    dxRibbon: TdxRibbon;
    dxBarManagerBar: TdxBarManager;
    About: TdxBarButton;
    // ...

    procedure FormCreate(Sender: TObject);
    procedure AboutClick(Sender: TObject);
    // ...
  private
    { Private declarations }

    SomePrivateVar : String;
    // ...

    {$ifdef CodeTest}
         StartTestTimer : TTimer;
    {$endif}

    {$ifdef CodeTest}
         // Code Test Routines

         procedure CodeTestsBtnClick(Sender: TObject);

         // Start code testing after some delay to properly initialize app
         procedure StartTestingTimer(Sender: TObject);

         function  CodeTests() : Boolean;
         procedure CodeSingleTest(TheButton : TdxBarButton; strTestData : String = '');
         // ...
    {$endif}    {.$ifdef CodeTest}

    function SomePrivateFunction();
  public
    { Public declarations }

    Public_Var_1 : Integer;
    Public_Var_2 : Integer;

    function SomeFunction();
  end;

var
   MainForm : TMainForm;

implementation

{$R *.dfm}

{$ifdef CodeTest}
        {$include _CodeTests.pas}
{$endif}

// ----------------------------------------------------------------------- //
procedure TMainForm.FormCreate(Sender: TObject);
begin
     // ...
end;
// ----------------------------------------------------------------------- //

...

代码测试单元如下所示:

function CodeTest();
begin
      // Hide Folders Left Panel
      CodeSingleTestChecked(ShowFolders, ''{strTestData}, False{NewValue});
      Assert( IsOK( (NxSplitterLeft.Visible = False) And
                    (NxPanelFolders.Visible = False) And

                    (NxPanelFiles.PanelBorders  = [boBottom, boTop, boRight, boLeft]) And
                    (NxHeaderPanel.Margins.Left = 1)
            ));

      // etc...
end;

唯一真正的限制是我必须将代码测试单元包含在主窗体中(即。{$include _CodeTests.pas}),除此之外,我有我需要的一切:功能测试,压力,结果和错误检查等...

我唯一的问题是;我现在需要聘请某人来完成这些测试,但我真的不希望暴露我的代码(至少不是在开头),所以我想知道是否有办法给新人代码测试单元但不是项目代码,只有函数头,即

procedure TMainForm.FormCreate(Sender: TObject);
procedure TMainForm.NewBtnClick(Sender: TObject);
procedure TMainForm.HelpClick(Sender: TObject);
...

这样他/她就可以继续进行代码测试,同时仍能保护我的代码,至少在我信任这个人之前。

寻求法律建议,我对技术观点感兴趣,即。如果可以保护我的代码而不会让那个人的工作变得更难。

我考虑过使用构建软件(我拥有并主动使用FinalBuilder),构建服务器等......但最终决定 if 我可以inject中的测试代码EXE 没有必须重新编译,这对我来说是个想法。

所以我的问题是:是否可以在EXE中注入测试代码而无需重新编译?

PS。是的,我知道关于DUnit ,但考虑到项目规模和范围时,现在无法立即切换测试框架 。时间限制

0 个答案:

没有答案