3

DelphiでDUnitXを使用していますが、行き詰まりました。テストのリストを動的に作成するにはどうすればよいですか?

たとえば、SQLのリストがあり、それらすべてを次のようにテストする必要があります

for i:= 0 to List.Count do
  begin
    AddTest(List[i].SQL, List[i].Info, List[i].MaxTime);
  end;

1つの方法の場合、これは簡単です

[Test]
procedure TestSingleSQL;

実装

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

しかし、テストのリストが必要な場合、属性は不十分です。 RepeatTest属性も不適切です。1 つのテストが内部で失敗した場合、テスト全体が停止しますが、すべての 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 に答える