1

私の場合、うまく機能する原始的なテストフレームワーク(一種)があります。

これは基本的に、プロジェクトのメイン フォームに $INCLUDE された特別なテスト ユニットです。

たとえば、メイン フォームが次のようになっているとします。

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 を所有し、積極的に使用しています)、ビルド サーバーなどを使用することを考えましたが、最終的に、再コンパイルすることなくEXE 内のコードをテストできれ、これがアイデア シナリオになると判断しました。inject

だから私の質問は: 再コンパイルせずにEXEにテストコードを挿入することは可能ですか)

PS。はい、私は DUnit について知っていますが、プロジェクトのサイズと時間の制約を考慮すると、今すぐテスト フレームワークを切り替えることはできません。

4

0 に答える 0