2016-03-20 9 views
2

Dunitx'teki ad alanlarının, bir ad alanı altındaki tüm test donanımlarının bir çift kurulum/yıpranma yordamının kapsayacağı şekilde kullanılması mümkün mü? (Nunit'teki SetupFixture özniteliğine benzer şekilde, http://www.nunit.org/index.php?p=setupFixture&r=2.5.5). Genel kurulum ve söküm yöntemlerineDunitx'te bir ad alanındaki tüm bağlantılar için ortak bir kurulum rutini oluşturabilir miyim?

  • Tests.MyFixture.MyTestUnit1.pas ile TMyFixtureInitializer sınıf için

    • Tests.MyFixture.pas:

      aşağıdaki birimi adları/ad alanları kullanmaya çalıştı ve gerçek test dersleri için Tests.MyFixture.MyTestUnit2.pas.

    aşağıdaki sorunlarla karşılaştı: Sınıf kendisi herhangi bir test rutini içermiyorsa

    • TMyFixtureInitializer.SetupFixture ve TeardownFixture yürütülmez. Tests.MyFixture.MyTestUnit1 ve Tests.MyFixture.MyTestUnit2 içinde, SetupFixture ve TeardownFixture rutinleri denir TMyFixtureInitializer bir kukla testi ekledikten sonra

    • ancak sonra testleri. Ben yapıcı SetupFixture niteliğini ve TMyFixtureInitializer yıkıcı üzerinde TeardownFixture özelliğini ayarlamak
    • , daha önce yürütülür ve sonuçta testleri, tamamen ad alanlarını görmezden.

    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 kaynağı benzerdir).

    Başlatma ve temizleme düzenlemek için ad alanlarının nasıl kullanılacağı konusunda bir örneği var mı?

  • cevap

    0

    Imho, herhangi bir test yapmadan bir [TestFixture] tanımlamak anlamsız ... Ve: Bildiğim kadarıyla DUnitX'te isim alanlarına destek yok. DUnitX, tüm donanımları (ve testleri) bir döngüde çalıştırır.

    yalnızca tüm testler/tüm testlerden sonra, sadece (yerine) Aşağıdaki yapamadan çalıştırmak yöntemleri gerekirse:

    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. 
    

    Ama muhtemelen bu Çözüm senin problemin için çok basit ... Sanırım, bir gruptan daha fazlasına sahip olmak istiyorsun. Üzgünüm, bunun için bir fikir yok.

    İlgili konular