加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 数据驱动的DUnit测试

发布时间:2020-12-15 04:26:47 所属栏目:大数据 来源:网络整理
导读:DUnit通常工作的方式是编写一些已发布的方法,DUnit将其作为测试运行.我想做的是有点不一样.我想在运行时根据数据创建测试.我试图测试一个特定的模块来处理输入文件以创建输出文件.我有一组测试输入文件与相应的已知的良好的输出文件.这个想法是动态创建测试,
DUnit通常工作的方式是编写一些已发布的方法,DUnit将其作为测试运行.我想做的是有点不一样.我想在运行时根据数据创建测试.我试图测试一个特定的模块来处理输入文件以创建输出文件.我有一组测试输入文件与相应的已知的良好的输出文件.这个想法是动态创建测试,每个输入文件一个,用于处理输入,并根据已知的输入文件检查输出.

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

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

>在运行时从随机生成的整数命名. (以’name’表示出现在测试者树中的测试名称.)
>根据随机整数传递或失败.通过甚至,失败的奇怪.

从DUnit的设计来看,它的设计考虑到了足够的灵活性,使其成为可能.我不知道是不是.我尝试通过继承TAbstractTest和ITest创建自己的测试类,但是一些关键的方法是不可访问的.我也尝试从TTestCase继承,但这个类与运行已发布的方法的想法密切相关(测试以方法命名,所以我不能只有一个叫“去”,因为那个我所有的测试都会被称为“去”,我想让我所有的测试都被单独命名).

或者,还有一些替代DUnit可以做我想要的东西吗?

解决方法

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读