我有原始的测试框架(某种),在我的情况下工作得很好。
它基本上是一个特殊的测试单元,在项目的主窗体中包含 $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 ,但考虑到项目规模和时间限制,现在无法切换测试框架