2010-06-10 26 views
11

Yüksek bir döngüsel karmaşıklığa (iç çekme) sahip olan bir yöntemi test etmek istiyorum ve test sınıfında bir sınıfa sahip olmak istiyorum, böylece bir yöntem test sınıfı bir düğüm olarak görünür. ağaç. Nunit ile nasıl mümkün olabilir?Nunit: Testlerin iç içe geçmesi mümkün mü?

+0

Eğer testler yerleştirerek gerçekleştirmek için çalışıyoruz? – Pedro

+0

Bu sorudan belli değil mi? – epitka

+0

Sadece bazı testleri çalıştırmak istiyor musunuz, başkalarını değil mi? Bunları sadece görsel olarak ayırmak için mi ihtiyacınız var? – Pedro

cevap

17

Sorunuzdaki örnek kodla çok benzer iç içe geçmiş sınıflar ile yapabilirsiniz.

Kodunuzdaki tek fark, yalnızca yapı için kullanıldığında ve sınamaların kendisinin bulunmadığı durumlarda dış sınıfın [TestFixture] özniteliğine ihtiyacı olmamasıdır.

Ayrıca tüm iç sınıflar dış sınıfa koyarak ve iç sınıflar alarak, bir Setup yöntemi paylaşmak zorunda dış sınıfından devralabilir:

using NUnit.Framework; 

namespace My.Namespace 
{ 
    public class MyEntityTests 
    { 
     [SetUp] 
     public void Setup() 
     { 
     } 

     [TestFixture] 
     public class MyComplexMethodTests : MyEntityTests 
     { 
      [Test] 
      public void when_some_condition_than() 
      { 
      } 

      [Test] 
      public void when_some_other_condition_then() 
      { 
      } 
     } 
    } 
} 

NUnit GUI olarak, bu test sınıfı olacak şu şekilde görünür:

NUnit GUI

+3

Resharper'ın test koşucusu, bu şekilde yapılandırılmış herhangi bir testi görmezden geliyor gibi görünüyor. : \ –

+0

@JohnHoerr Bu ReSharper'ın daha yeni sürümlerinde. –

+0

İç sınıfların ek bir SetUp yöntemine sahip olup olmadığını biliyor musunuz? Daha sonra herkes için sınıfsal kurulum gerçekleşebilir ve iç sınıfa özgü yönteme özgü kurulum gerçekleşebilir mi? Nevermind, cevabı burada buldu: https://stackoverflow.com/questions/17659213/nunit-and-setup-in-base-classes – IronSean

1

Test etmek istediğiniz bir sınıfa sahip olduğunuza benziyor, ancak çalıştırmanız için iki takım/test türünüz var. Bunu yapmanın en kolay yolu, her biri için bir tane olmak üzere iki TestFixture yaratmak olabilir. Bunu yapmanın bir diğer yolu, her bir testi bir Kategoriye yerleştirmektir.

Düzenleme: Tüm testler aynı yöntemdeyse, bir seçenek TestCase özniteliğini kullanmak ve her bir testin parametrelerini (beklenen sonucun yanı sıra) belirtmek içindir. GUI her bir TestCase parametresi kümesini yerleştirir. Bu test adının tek bir örneğinde. Bu, tüm testlerin benzer şekilde davranacağını varsayar, yani aynı Temel Değerler veya BeklenenExceptions anlamına gelir. (? Istismar)

6

Bu davranışı elde etmek ad alanlarını kullandım:

namespace MyEntityTests.MyComplexMethodTests 
{ 
    [TestFixture] 
    public class when_some_condition_than 
    { 
     [Test] 
     public void it_should_do_something() 
     {   
     } 
    } 

    [TestFixture] 
    public class when_some_other_condition_than 
    { 
     [Test] 
     public void it_should_do_something_else() 
     {   
     } 
    } 
} 

verecektir Hangi: Normalde tanımlamak için TestFixture kullanacağız Bu durumda

MyEntityTests 
- MyComplexMethodTests 
    - when_some_condition_than 
    - it_should_do_something 
    - when_some_other_condition_than 
    - it_should_do_something_else 

test için bağlam.

+0

+1 - Mevcut ihtiyaçlar için iyi bir çözüm. – JOpuckman