DUnit:如何运行测试?

时间:2010-03-22 16:07:58

标签: delphi unit-testing tdd delphi-5 dunit

如何从IDE运行 TestCase

我用一个简单的形式创建了一个新项目:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

end.

现在我将添加一个测试用例,以检查推送Button1是否应该执行的操作:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
    TestFramework;

type
  TForm1Tests = class(TTestCase)
  private
        f: TForm1;
  protected
     procedure SetUp; override;
     procedure TearDown; override;
  published
     procedure TestButton1Click;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    //todo
end;

{ TForm1Tests }

procedure TForm1Tests.SetUp;
begin
  inherited;

    f := TForm1.Create(nil);
end;

procedure TForm1Tests.TearDown;
begin
    f.Free;
  inherited;
end;

procedure TForm1Tests.TestButton1Click;
begin
    f.Button1Click(nil);
    Self.CheckEqualsString('Hello, world!', f.Caption);
end;

end.

鉴于我所做的(GUI项目中的测试代码),我现在如何触发测试运行?如果我按 F9 ,则只显示表格:

alt text http://i39.tinypic.com/zsobhv.jpg

理想情况下,IDE中会有一个按钮或菜单选项,说运行DUnit测试

alt text http://i44.tinypic.com/24wvipw.jpg

我生活在梦想世界吗?一个梦幻般的土地,住在棒棒糖车道的胶糖屋里?

3 个答案:

答案 0 :(得分:12)

将TestCase添加到主项目中是不可取的。您应该创建一个单独的TestProject(您可以将它与主项目放在同一个ProjectGroup中),添加一个TestCase并运行。

答案 1 :(得分:6)

我同意Uwe Raabe,但有时在您的应用程序中使用“隐藏”链接来运行DUnit GUI会很有用。我用:

TGUITestRunner.runRegisteredTests;

通过DUnit GUI上的按钮调用此按钮将打开,您可以手动运行并查看测试输出。


例如,如果在打开软件自己的“控制面板”时按住特殊组合键,则会获得一些高级条目:

enter image description here

答案 2 :(得分:2)

我喜欢在IDE中使用'Run DUnit tests'命令的想法。

可以通过检查同一文件夹中的DUnit项目来实现,该项目与当前项目具有相同的名称:

  • Project1.dpr - >被测软件
  • Project1.Tests.dpr => DUnit测试应用程序

在这种情况下,IDE应启用Run DUnit tests命令。

  • 执行测试后,应显示所有失败测试的列表,以便跳转到测试失败的源行

  • 如果测试导致内存泄漏,则应显示所有泄漏的列表,以便跳转到已创建内存泄漏的源行

(可以将DUnit配置为检测内存泄漏并在找到内存时进行失败测试)