2016-03-20 2 views
2

dunitxで名前空間を使用することは可能ですか?ネームスペース下のすべてのテストフィクスチャが1組のsetup/teardownルーチンで囲まれるようにしますか? (nunitのSetupFixture属性に似ています、http://www.nunit.org/index.php?p=setupFixture&r=2.5.5)。dunitxのネームスペース内のすべてのフィクスチャに対して共通のセットアップルーチンを作成できますか?

私は、次のユニット名/名前空間を使用してみました:一般的なセットアップとティアダウンメソッドを持つ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源が類似しています)。

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

答えて

0

Imho、テストなしで[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. 

しかしおそらく、これを解決策はあなたの問題にはあまりにも単純すぎる...私は、あなたが複数の名前空間を持っていたいと思っています。 申し訳ありませんが、これについては考えられません。

関連する問題