2010-02-23 27 views
11

NUnit ile ilgili bir sorunum var - herhangi bir fikri olup olmadığını merak etme.NUnit özellik mirasına uymuyor

NUnit 2.5.3.9345 ve C# 3.5 kullanıyoruz.

Aşağıdaki kodu atın: Ben SomeTestClass.SomeTest() çalıştırırsanız, documentation göre

public class UnitTestBase 
{ 
    [TestFixtureSetUp] 
    public void SetUpTestFixture() 
    { 
     //Do something in base 
    } 
} 

[TestFixture] 
public class SomeTestClass : UnitTestBase 
{ 
    [TestFixtureSetUp] 
    public void FixtureSetUp() 
    { 
     //Do something in test class 
    } 

    [Test] 
    public void SomeTest() 
    { 
     //Some assertion 
    } 
} 

, UnitTestBase.SetUpTestFixture()SomeTestClass.FixtureSetUp() önce çağrılmalıdır.

Durum böyle değil - temel yöntem yalnızca türetilen sınıfta bir [TestFixtureSetUp] yöntemi sağlamadığında çağrılır.

Herhangi bir fikir lütfen? Beni gerçekten şaşırttı!

Teşekkürler.

+1

Bu, aynı zamanda, nunit postalama listesinde de tartışılmaktadır: http://groups.google.com/group/nunit-discuss/browse_thread/thread/be59e1152773a456 –

cevap

2

Sorun yaşıyorum. Aşağıdaki ile sonucunu test:

Türetilmiş Testi

[TestFixture] 
public class DerivedTest : TestBase 
{ 

    [TestFixtureSetUp] 
    public void FixtureSetup() 
    { 

     File.AppendAllText("Out.txt", string.Format("TestFixtureSetUp From DerivedTest{0}", Environment.NewLine)); 
    } 

    [TestFixtureTearDown] 
    public void FixtureTearDown() 
    { 
     File.AppendAllText("Out.txt", string.Format("TestFixtureTearDown Down From DerivedTest{0}", Environment.NewLine)); 
    } 

    [SetUp] 
    public void Setup() 
    { 
     File.AppendAllText("Out.txt", string.Format("Setup From DerivedTest{0}", Environment.NewLine)); 
    } 
    [TearDown] 
    public void Down() 
    { 
     File.AppendAllText("Out.txt", string.Format("TearDown From DerivedTest{0}", Environment.NewLine)); 
    } 

    [Test] 
    public void DoATest() 
    { 
     File.AppendAllText("Out.txt", string.Format("Did a Test{0}", Environment.NewLine)); 
    } 
} 

TestBase

public class TestBase 
{ 

    [TestFixtureSetUp] 
    public void BaseTestFixtureSetUp() 
    { 
     File.AppendAllText("Out.txt", string.Format("TestFixtureSetUp From TestBase{0}", Environment.NewLine)); 
    } 

    [TestFixtureTearDown] 
    public void BaseTestFixtureTearDown() 
    { 
     File.AppendAllText("Out.txt", string.Format("TestFixtureTearDown From TestBase{0}", Environment.NewLine)); 
    } 

    [SetUp] 
    public void BaseSetup() 
    { 
     File.AppendAllText("Out.txt", string.Format("Setup From TestBase{0}", Environment.NewLine)); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     File.AppendAllText("Out.txt", string.Format("TearDown From TestBase{0}", Environment.NewLine)); 
    } 
} 

Bu aşağıdaki çıktıyı üretir: Ben çıkışını test edebilmesi am

TestFixtureSetUp From TestBase 
TestFixtureSetUp From DerivedTest 
Setup From TestBase 
Setup From DerivedTest 
Did a Test 
TearDown From DerivedTest 
TearDown From TestBase 
TestFixtureTearDown Down From DerivedTest 
TestFixtureTearDown From TestBase 

ReSharper 5 beta ve Nunit GUI v 2.5.3 ile.9345 (32-bit) iş yerinde ReSharper 4.5 test atlet düzgün çalışması vermemekle birlikte

Düzenleme Ancak gelen NUnit.exe/NUnit 86.exe ile x86 ve x64 inşa Test projesini çalışan geçerli çıktı üretti.

+0

ReSharper 5'i herhangi bir şansla mı kullandınız? – Michael

+0

Evet evde beta 5 kullanıyorum. –

+0

Bunu yanıt olarak işaretledik - bir ReSharper & TeamCity sorunu gibi görünüyor - ReSharper'ımızı (bir kez yayınlandığında 5) ve TeamCity NUnit eklentimizi güncellemek için bu özellikten en iyi şekilde yararlanabilmem için tuşuna basıyorum. – Michael

0

Temel sınıfı [TestFixture] özniteliğine vermeyi denediniz mi? Bunu düzeltebileceğini bilmiyorum, ama denemeye değer gibi gözüküyor ... fikir, NUnit'in bir TestFixture değilse, temel sınıftaki öznitelikleri görmezden gelmesi olabilir.

+0

Evet, temel sınıftaki [TestFixture] olmadan aynı davranış. Türetilmiş sınıf yönteminden [TestFixtureSetUp] özniteliğini alırsam, temel çağrılır. – Michael

0

Evet, bununla yarım saat kadar uğraştım ve kesinlikle bir böcek. TestFixture'ı tüm sınıflara ekleyerek farklı kombinasyonlara sahip olmayı denedim. Ayrıca statik ve örnek yöntemleri denedim. Sadece güzel oynamak istiyorum görünmüyor! :-(

Her neyse, bulabildiğim en iyi çözüm, TestFixtureSetUp kodunu test sınıfınızın ve taban sınıfınızın yapıcılarına yerleştirmektir.En azından o zamanlar mirastan emin olabilirsiniz ve diğer okuyucuların daha açık belki

+0

Bu arada, NUnit v2.5.0.9122'ye karşı denedim ve bu sürümde işe yaramıyor, bu yüzden bu son zamanlarda tanıtılan bir şey değil. –

+0

NUnit Windows Uygulaması'nda çalıştı ve Resharper koşucusunu kullanarak çalıştı. :-( –

+0

Sadece doğru cevabı Marks cevabından çalıştırdım ve sadece türetilmiş sınıflar test çıktısını çıkardım, hiçbir şey temel sınıftan değil.Şimdi kamış tutmaya başlıyorum ama 32- 64 bit koşuyorum.Bu farklı sonuçlar doğurabilen fark olabilir mi? –

1

:-) NUnit iç çalışmasını bilmiyorum kodunuzu bir geçici çözüm/farklı bunu yapmanın yolu: hemen belli değil

yerine davranışa dayanarak, bunun yerine kullanarak böyle bir şey yapmak Normal dil özelliklerini kullanarak siparişi açık yapmak için şablon yöntem modeli:

Kalıtsal demirbaşlar veya test bağlamları kullanma nedenim olduğunda, bu şekilde yeterince iyi çalıştı. :)

Özniteliklere dayanmayla ilgili problemim, bu türler, yöntemler arasında hiçbir ilişki olmaksızın koşucudaki yansıma yoluyla yaratıldığından ve çağrılmasından beri, (hangi bir polimorfizm değil), aradı. Standart dil özelliklerini kullanmak, bunu basitleştirmeye yardımcı olur.

+0

Bunun iyi bir yol olduğunu düşünüyorum, evet evet - NUnit'in yerleşik özelliklerini kullanıyorum. Sipariş yok Çok fazla bir mesele, sadece her bir yöntemden birini ve türetilmiş sınıftaki her birini tanımladığım sürece - bu şekilde siparişin bir garantisi var (istisna sağlanmadı) s/teardown sırasında atılır) – Michael

0

Testlerinizi neyle çalıştırıyorsunuz? Yaşadığınız davranış, NUnit (framework) ile değil, kullandığınız runner ile ilgilidir. Resharper entegre testrunner kullanıyor musunuz?

+0

Hem NUnit GUI hem de Resharper koşucusunu aynı sonuçla denedim. –

+0

Bir TestFixtureTearDown'ı temelde mi yoksa türetilmiş mi yoksa her ikisini de mi yüklerseniz bu herhangi bir şeyi değiştirir mi? – Simone

+0

NUnit 2.5.3 GUI kullanarak bu çalışır ve ReSharper 5 beta 2 çalışır. ReSharper 4.5.1, TeamCity derlememizle birlikte bir sorun gibi görünüyor (5.0.10669) – Michael