1

我有原始的测试框架(某种),在我的情况下工作得很好。

它基本上是一个特殊的测试单元,在项目的主窗体中包含 $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)、构建服务器等......但最终决定如果我可以inject在 EXE 中测试代码而无需重新编译,这将是我的理想方案。

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

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

4

0 回答 0