私の場合、うまく機能する原始的なテストフレームワーク(一種)があります。
これは基本的に、プロジェクトのメイン フォームに $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 について知っていますが、プロジェクトのサイズと時間の制約を考慮すると、今すぐテスト フレームワークを切り替えることはできません。