3

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

例如,我有 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

任何建议

编辑1

在 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 中的等价物是什么?

4

2 回答 2

1

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

ps 我是一个基于 DUnit 并大量使用动态测试生成的开源组件测试框架的作者。

于 2015-11-05T11:19:30.247 回答
1

通过在 JSON 文件中声明测试用例并连接到 DUnitX 插件系统,我在某种程度上取得了成功:

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

于 2018-08-07T14:47:10.103 回答