标签: dunit

使用FreeOnTerminate = True的TThread的Delphi单元测试

当FreeOnTerminate = True时,为TThread后代编写Delphi DUnit测试的最佳方法是什么?TThread后代返回一个我需要测试的引用,但我无法弄清楚如何等待线程在测试中完成...

unit uThreadTests;

interface

uses
  Classes, TestFramework;

type

  TMyThread = class(TThread)
  strict private
    FId: Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(AId: Integer);
    property Id: Integer read FId;
  end;

  TestTMyThread = class(TTestCase)
  strict private
    FMyId: Integer;
    procedure OnThreadTerminate(Sender: TObject);
  protected
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestMyThread;
  end;

implementation

{ TMyThread }

constructor TMyThread.Create(AId: Integer);
begin
  FreeOnTerminate := True;
  FId := AId;

  inherited Create(False);
end;

procedure TMyThread.Execute;
begin
  inherited;

  FId := FId + 1;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi unit-testing dunit tthread delphi-2010

12
推荐指数
1
解决办法
4500
查看次数

数据驱动的DUnit测试

DUnit通常的工作方式是编写一些已发布的方法,而DUnit将它们作为测试运行.我想做的是有点不同.我想在运行时根据数据创建测试.我正在尝试测试处理输入文件的特定模块以创建输出文件.我有一组测试输入文件,其中包含相应的已知良好输出文件.我们的想法是为每个输入文件动态创建一个测试,处理输入并根据已知的好输出检查输出.

然而,这里的实际数据来源并不重要.困难在于使DUnit以数据驱动的方式运行.为了解决这个问题,假设数据源只是一个随机数生成器.这是一个解决困难核心的示例具体问题:

在运行时创建一些测试对象(TTestCase或其他),比如10个,每个测试对象

  1. 在运行时从随机生成的整数中命名.('name'我的意思是测试运行树中出现的测试名称.)
  2. 基于随机整数传递或失败.通过甚至,奇怪的失败.

从DUnit的设计来看,它的设计看起来具有足够的灵活性,使这些事情成为可能.我不确定它是不是.我试图通过继承TAbstractTest和ITest来创建我自己的测试类,但是一些关键的方法无法访问.我也尝试从TTestCase继承,但是这个类与运行已发布方法的想法密切相关(并且测试以方法命名,所以我不能只调用一个,比如'go',因为那时候我所有的测试都会被称为'go',我希望我的所有测试都被单独命名).

或者,是否有一些替代DUnit可以做我想要的?

delphi dunit dynamic data-driven-tests

11
推荐指数
1
解决办法
1477
查看次数

使用FinalBuilder和AQTime获取DUnit测试覆盖率统计数据

我们有一个庞大的Delphi项目(150万行代码),我们正在转向使用敏捷流程.

我们已经有了一个连续的集成环境(FinalBuilder),我已将其更新为包含单元测试(dUnit)和代码指标(CodeHealer)的电子邮件给我们开发团队中的每个人.我们的单元测试覆盖率并不高,所以我现在正试图将AQtime纳入混合,以便在每次构建时获得一些测试覆盖率结果.

我正在使用"执行程序"任务来运行单元测试可执行文件,记录结果并随后解析文件.我打算使用"运行脚本"任务来运行AQtime(通过COM)并将结果导出到XML,以便我可以解析这些结果.

我遇到的问题是AQtime运行单元测试可执行文件,我失去了直接监视单元测试可执行文件的能力.我想让FinalBuilder解析两个任务的结果.有没有人知道如何从AQtime调用dUnit结果?

delphi unit-testing dunit finalbuilder aqtime

10
推荐指数
1
解决办法
1597
查看次数

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.
Run Code Online (Sandbox Code Playgroud)

现在我将添加一个测试用例来检查推送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 …
Run Code Online (Sandbox Code Playgroud)

delphi tdd unit-testing dunit delphi-5

10
推荐指数
2
解决办法
2477
查看次数

Free Pascal和Delphi的单源单元测试

有没有办法编写单元测试,以便可以使用Delphi和Free Pascal编译和运行它们?

Delphi和Free Pascal有不同的单元测试框架,这会导致针对两个编译器(例如,库和框架开发人员)的开发人员的重复工作.

所以也许有一种方法,使用DUnit或FPCUnit框架并调整测试用例源代码(或框架本身),以便它也可以与其他编译器一起使用.

基本上问题是:

  • 哪个框架(DUnit或FPCUnit)可以用两个编译器(Delphi和Free Pascal)编译,尽可能少的修改?

要么

  • 有没有第三个框架(感谢Arnaud提到TSynTest)与Delphi和FPC一起工作?

delphi unit-testing freepascal dunit

10
推荐指数
2
解决办法
1501
查看次数

DUnit比较两个文本文件并显示Diff

有没有办法比较两个文本文件,并显示差异,如果他们在dunit不相同?

简单的开始是将它们读取到TStringList,但是用于比较两个文本文件的代码要复杂得多,而且DUnitGui中的gui对此不够.

任何的想法?建议?

windows delphi diff user-interface dunit

9
推荐指数
1
解决办法
2055
查看次数

在Delphi 2010上更新DUnit

有谁知道如何将Delphi 2010附带的dUnit更新到最新的svn源代码?

svn delphi dunit

9
推荐指数
1
解决办法
770
查看次数

使用Delphi IDE中的DUnit并避免异常断点

我正在使用Delphi XE,我有一个包含主应用程序和DUnit测试应用程序的项目组.我不时会去DUnit测试应用程序添加一些测试并运行现有测试.

一些测试代码生成由应用程序处理的异常,但由Delphi Debugger多次显示,因为我习惯使用F9快捷方式运行测试应用程序,就像我使用标准应用程序一样:在这种情况下,这不是很方便.

我知道在没有调试的情况下运行的SHIFT+ CTRL+ F9快捷方式,当我记得使用它时这很好但是我经常发现自己打F9,然后咕,然后关闭测试应用程序,然后点击SHIFT+ CTRL+ F9.多么浪费时间.

所以我的问题是:有更好的方法吗?我可以定义一些设置或使用某些专家来默认运行该特定应用程序而无需调试吗?当然,我不是唯一一个遇到这个问题的人.

提前致谢.

delphi debugging dunit

8
推荐指数
1
解决办法
1072
查看次数

单元测试Firemonkey应用程序

我正在尝试使用RAD Studio XE2附带的DUnit对Firemonkey应用程序(C++)进行单元测试.

问题是,DUnit是一个VCL项目,这使我无法在测试项目中包含Firemonkey单位表格(例如:UfrmMain.h).

即使我将Visual与Logic(MultiTier/MVC)分开,我也不能在我的类中包含任何Firemonkey库(当有一个类"CustomDatabase"具有类型为TConnection的对象时,这有用,这是有用的在Firemonkey中 - 当然只是一个例子).

当我完全分离firemonkey代码并将其保留在表单上时,可以进行测试,并且逻辑/数据保留在具有纯C++代码的类上.

那么,这种"障碍"实际上是一件好事吗?强迫我使用MultiTier/MVC?(C++中的这个东西对我来说是新的)或者我应该寻找单元测试的替代方案,让我也可以测试表单?

(你能在github或代码示例中推荐一些C++项目,它以上面提到的方式分开,我可以依赖吗?)

delphi unit-testing dunit n-tier-architecture firemonkey

8
推荐指数
1
解决办法
674
查看次数

在一个Dunit项目和exe版本信息被禁用,我该如何取回它?

为什么我不能在Dunit Test projet中设置版本信息?该项目的复选框已禁用,但其他项目未禁用.看截图:

在此输入图像描述

delphi version dunit delphi-2010

8
推荐指数
2
解决办法
1447
查看次数