动态创建测试列表

时间:2015-11-05 09:07:16

标签: unit-testing delphi dunit dunitx

我在Delphi中使用DUnitX但是我卡住了。 如何动态创建测试列表?

e.g。 我有sql列表,需要像

一样测试它们
for i:= 0 to List.Count do
  begin
    AddTest(List[i].SQL, List[i].Info, List[i].MaxTime);
  end;

对于一种方法,这很简单

[Test]
procedure TestSingleSQL;

实施

procedure TestSingleSQL;
Var tick: Cardinal;
begin
  tic:= GetTickCount;
  Connection.Execute(SQL);
  Assert.IsTrue(Abs(GetTickCount-Tick)<MaxTime);
end

但如果我需要测试列表,那么属性就不合适了。 RepeatTest 属性也不合适, 因为如果一次测试失败了 然后整个测试停止,但我需要运行所有的SQL

任何建议

EDIT1

在DUnit(没有X)这可能是这样的

function CreateDBTests: ITestSuite;
Var i: Integer;
  baza: String;
  TS_Connected, TS_SumyZlecFakt, TS_WPLATY, TS_KONTRAHENT: ITestSuite;
begin
  Result:= TTestSuite.Create('Lista baz');

  TS_Connected:= TTestSuite.Create('Połączenia');
  TS_SumyZlecFakt:= TTestSuite.Create('SyumyZlecFakt');
  TS_WPLATY:= TTestSuite.Create('Wpłaty');
  TS_KONTRAHENT:= TTestSuite.Create('Kontrahent');
  for i:= 0 to ListaBaz.Count-1 do
    begin
      baza:= ListaBaz[i];

      TS_Connected.AddTest(TTestConnected.CreateDBListTest(baza));
      TS_SumyZlecFakt.AddTest(TestSumyZlecFakt.CreateDBListTest(baza));
      TS_WPLATY.AddTest(TestWplaty.CreateDBListTest(baza));
      TS_KONTRAHENT.AddTest(TestKontrahent.CreateDBListTest(baza));
    end;

  Result.AddSuite(TS_Connected);
  Result.AddSuite(TS_SumyZlecFakt);
  Result.AddSuite(TS_WPLATY);
  Result.AddSuite(TS_KONTRAHENT);
end;

DUnitX中的等价物是什么?

2 个答案:

答案 0 :(得分:1)

根据this描述,DunitX是属性驱动的。它并不意味着是DUnit的直接替换(或扩展)。所以我猜它不支持动态测试用例创建。

P.S。我是一个基于DUnit的开源组件测试framework的作者,并大量使用动态测试生成。

答案 1 :(得分:1)

通过在JSON文件中声明测试用例并连接到DUnitX插件系统,我以某种方式成功完成了

https://github.com/VSoftTechnologies/DUnitX/issues/211#issuecomment-411082097