首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据驱动DUnit测试

数据驱动DUnit测试
EN

Stack Overflow用户
提问于 2009-04-01 11:39:44
回答 2查看 1.5K关注 0票数 11

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

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

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

  1. 是在运行时根据随机生成的整数命名的。(我所说的“名称”是指出现在测试运行树中的测试的名称。)
  2. 基于随机整数通过或失败。偶数不及格,奇数失败。--

从DUnit的设计来看,它的设计考虑到了足够的灵活性,使得这样的事情成为可能。不过,我不确定是真的。我试图通过继承TAbstractTest和ITest来创建自己的测试类,但是一些关键的方法无法访问。我也尝试过继承TTestCase,但是这个类与运行已发布方法的想法密切相关(而且测试是以方法命名的,所以我不能只让一个名为‘go’的测试,因为这样我的所有测试都将被称为'go',并且我希望所有的测试都被单独命名)。

或者,有什么替代DUnit的方法可以做我想做的事呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-01 11:58:03

代码语言:javascript
复制
program UnitTest1;

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

uses
  Forms, Classes, SysUtils,
  TestFramework,
  GUITestRunner,
  TextTestRunner;

{$R *.RES}

type
  TIntTestCase = class(TTestCase)
  private
    FValue: Integer;
  public
    constructor Create(AValue: Integer); reintroduce;
    function GetName: string; override;
  published
    procedure Run;
  end;

{ TIntTestCase }

constructor TIntTestCase.Create(AValue: Integer);
begin
  inherited Create('Run');
  FValue := AValue;
end;

function TIntTestCase.GetName: string;
begin
  Result := Format('Run_%.3d', [FValue]);
end;

procedure TIntTestCase.Run;
begin
  Check(FValue mod 2 = 0, Format('%d is not an even value', [FValue]));
end;

procedure RegisterTests;
const
  TestCount = 10;
  ValueHigh = 1000;
var
  I: Integer;
begin
  Randomize;
  for I := 0 to TestCount - 1 do
    RegisterTest(TIntTestCase.Create(Random(ValueHigh) + 1));
end;

begin
  Application.Initialize;
  RegisterTests;
  if IsConsole then
    TextTestRunner.RunRegisteredTests
  else
    GUITestRunner.RunRegisteredTests;
end.
票数 19
EN

Stack Overflow用户

发布于 2009-04-01 11:47:53

我想说的是,您基本上希望有一个“超级测试”函数,然后调用其他测试,每个数据文件一个。这就是我们使用DUnit测试之一所做的。您只需在一个循环中依次加载每个可用文件,并在适当的情况下使用Check运行测试。

在同一个项目中,我们还使用了另一种方法来测试最终的应用程序及其数据加载和分析,它是使用类似于FinalBuilder的东西在应用程序上循环(想必您也可以在DUnit应用程序上循环并使用一个参数)来处理各种不同的数据文件。然后应用程序运行,进行分析,然后在保存后退出。然后,另一个应用程序将结果数据与理想数据进行比较,并在适当情况下报告失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/705114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档