如何在delphi单元测试中使用可视化组件?

nev*_*ves 2 delphi unit-testing dunit delphi-7

正如在视觉应用程序中有时常见的那样,我有一些代码,其中数据在可视组件(TTreeView组件)中维护.我正在重构代码并为逻辑创建单元测试.

我的测试项目中唯一的可视化形式是GUITestRunner.将来我计划在持续集成服务器下将测试作为控制台应用程序运行,所以我没有任何形式.

当我尝试创建没有父级的TTreeView小部件并使用它时,我收到以下错误:

Control '' has no parent window
Run Code Online (Sandbox Code Playgroud)

在我的测试套件SetUp方法上创建小部件并在TearDown中销毁它的最佳方法是什么?是否可以在控制台应用程序中使用可视窗口小部件?我不需要显示它,甚至不需要处理事件.我只需要创建子节点并访问数据.

我设法让它与一个丑陋的黑客一起工作,但我想知道是否有一些标准的做法.

当然,在我阳光明媚和遥远的未来,我将重构这个2.1万行格式的代码,我的所有数据都将处于漂亮的数据结构中,并且这些测试不是必需的,但现在我需要它.

Dav*_*nan 6

您需要创建一个隐藏(即不可见)窗口作为父窗口.这是一个示例控制台应用程序,证明这种方法有效.

program HiddenWindow;

{$APPTYPE CONSOLE}

uses
  SysUtils, Forms, StdCtrls;

var
  Form: TForm;

begin
  Form := TForm.Create(Application);
  with TListBox.Create(Form) do begin
    Parent := Form;
    Items.Add('test');//fails if the parent is not set
  end;
end.
Run Code Online (Sandbox Code Playgroud)

  • +1直接回答而不是抱怨最佳实践以及单元测试和GUI测试之间的区别.;) (2认同)