2015-08-06 17 views
7

Nunit'ten birim testleri için Xunit kullanmaya geçtim. NUnit ile, aynı sonucu olan çoklu test senaryoları ile bir yöntem oluşturur. Örneğin, aşağıdaki NUnit birim sınaması, bir sınıf yapıcısının, özellikle "ad" değişkeninin geçerliliğini sınar. İsim boş, boş veya boşluk olamaz.Xunit'te birden çok test vakasını ele almanın tercih edilen yolu nedir?

[Test] 
    [TestCase(null)] 
    [TestCase("")] 
    [TestCase("  ")] 
    [ExpectedException(typeof(ArgumentNullException))] 
    public void Constructor_InvalidName_ExceptionThrown(string name) 
    { 
     // action 
     make_Foo(name); 
    } 

    private make_Foo(string name) 
    { 
     return new Foo(name); 
    } 

bu özelliktir kullanarak xUnit uygulamıştır nasıl: ArgumentNullException doğru atılır test eder

[Fact] 
    public void Constructor_InvalidName_ExceptionThrown() 
    { 
     Assert.Throws<ArgumentNullException>(() => new Foo(null)); 
     Assert.Throws<ArgumentNullException>(() => new Foo("")); 
     Assert.Throws<ArgumentNullException>(() => new Foo(" ")); 
    } 

Bu iki nedenden dolayı kötü görünüyor - Birden çok olması gerekiyordu ne de İddiası Bir "birim" testi ve yöntem içinde gömülü olan test durumları ile (diğer birim testlerinin bazılarında daha karmaşık olabilir).

Xunit'te birden çok sınama vakasını ele almanın tercih edilen yolu nedir?

+1

XUnit, kullanabileceğiniz 'Theory' adlı bir türe sahiptir. –

+0

XUnit'in Teori özniteliği örneği için: [burada] bakın (http://dontcodetired.com/blog/post/Creating-Inline fiyatları-Driven-Tests-in-xUnit.aspx) – prgmtc

cevap

9

Aynı etkiye Theory özelliğini kullanabilirsiniz:

[Theory()] 
[InlineData(null)] 
[InlineData("")] 
[InlineData("  ")] 
public void Constructor_InvalidName_ExceptionThrown(string name) 
{ 
    Assert.Throws<ArgumentNullException>(() => new Foo(name)); 
} 

Ben xUnit ancak ExpectedException eşdeğer am öznitelik varsa emin değilim. Varsa, I would not use it. Orada

xUnit bir ExpectedException nitelik olarak kullanılan ancak beri deprecated in favour of Assert.Throws olmuştur.

İlgili konular