delphi – 数据驱动的DUnit测试

前端之家收集整理的这篇文章主要介绍了delphi – 数据驱动的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.

猜你在找的Delphi相关文章