2

名前空間の下のすべてのテスト フィクスチャが 1 組のセットアップ/ティアダウン ルーチンによって囲まれるような方法で、dunitx で名前空間を使用することは可能ですか? (nunit の SetupFixture 属性と同様、http://www.nunit.org/index.php?p=setupFixture&r=2.5.5 )。

次のユニット名/名前空間を使用しようとしました:

  • TMyFixtureInitializer クラスの Tests.MyFixture.pas で、共通のセットアップ メソッドとティアダウン メソッドを使用します。

  • 実際のテスト クラスの Tests.MyFixture.MyTestUnit1.pas および Tests.MyFixture.MyTestUnit2.pas。

次の問題が発生しました。

  • TMyFixtureInitializer.SetupFixture と TeardownFixture は、クラス自体にテスト ルーチンが含まれていない場合は実行されません。

  • TMyFixtureInitializer にダミー テストを追加した後、SetupFixture ルーチンと TeardownFixture ルーチンが呼び出されますが、Tests.MyFixture.MyTestUnit1と Tests.MyFixture.MyTestUnit2 でのテストのです。

  • コンストラクタに SetupFixture 属性を設定し、TMyFixtureInitializer のデストラクタに TeardownFixture 属性を設定すると、名前空間を完全に無視して、すべてのテストの前後に実行されます。

Tests.MyFixture.pas:

unit Tests.MyFixture;

interface
uses
  DUnitX.TestFramework;

type

  [TestFixture]
  TMyFixtureInitializer = class(TObject)
  public

    [SetupFixture]
    procedure SetupMyFixture;
    [TeardownFixture]
    procedure TeardownMyFixture;
  end;

implementation


{ TMyFixtureInitializer }

procedure TMyFixtureInitializer.SetupMyFixture;
begin
  Self.Log('initialize a lot of stuff ...');
end;

procedure TMyFixtureInitializer.TeardownMyFixture;
begin
  Self.Log('cleanup a lot of stuff ...');
end;

initialization
  TDUnitX.RegisterTestFixture(TMyFixtureInitializer);
end.

Tests.MyFixture.MyTestUnit1.pas:

unit Tests.MyFixture.MyTestUnit1;

interface
uses
  DUnitX.TestFramework;

type
  [TestFixture]
  TestClass1 = class(TObject) 
  public
    [Test]
    procedure Test;
  end;

implementation


{ TestClass1 }

procedure TestClass1.Test;
begin
end;

initialization
  TDUnitX.RegisterTestFixture(TestClass1);
end.

(Tests.MyFixture.MyTestUnit2.pas のソースは類似しています)。

名前空間を使用して初期化とクリーンアップを整理する方法の例はありますか?

4

1 に答える 1

0

私見、テストなしで [TestFixture] を定義するのは意味がありません... そして、私の知る限り、DUnitX では名前空間がサポートされていません。DUnitX は、すべてのフィクスチャ (およびテスト) をループで実行するだけです。

すべてのテストの前またはすべてのテストの後に実行するメソッドのみが必要な場合は、(代わりに) 次のようにすることができます。

Tests.MyFixture.pas:

unit Tests.MyFixture;

interface
// uses
  //DUnitX.TestFramework;

type

  TMyFixtureInitializer = class(TObject)
  public

    class procedure SetupMyFixture;
    class procedure TeardownMyFixture;
  end;

implementation

{ TMyFixtureInitializer }

class procedure TMyFixtureInitializer.SetupMyFixture;
begin
  //Self.Log('initialize a lot of stuff ...');
end;

class procedure TMyFixtureInitializer.TeardownMyFixture;
begin
  //Self.Log('cleanup a lot of stuff ...');
end;

initialization
  TMyFixtureInitializer.SetupMyFixture;
finalization
  TMyFixtureInitializer.TeardownMyFixture;
end.

しかし、おそらく、この解決策はあなたの問題には単純すぎます...複数の名前空間が必要だと思います...それらを一種のグループ化します。申し訳ありませんが、これについてはわかりません。

于 2016-03-30T17:28:56.203 に答える