2016-03-29 24 views
0

Bir yöntemim var ve bunu iki veri kaynağıyla (benim durumumdaki iki liste) test etmek istiyorum. Birisi size nasıl yardımcı olabileceğini açıklayabilir mi? TestCaseSource özniteliğini kullanmalı mıyım?Çeşitli veri kaynaklarıyla Birim testi nasıl yapılır?

public void TestMethodIntToBin(int intToConvert, string result) 
    { 
     Binary converter = new Binary(); 
     string expectedResult = converter.ConvertTo(intToConvert); 
     Assert.AreEqual(expectedResult, result); 
    } 

public List<int> ToConvert = new List<int>() 
    { 
     12, 
     13, 
     4, 
     64, 
     35, 
     76, 
     31, 
     84 
    }; 
    public List<string> ResultList = new List<string>() 
    { 
     "00110110", 
     "00110110", 
     "00121011", 
     "00110110", 
     "00110110", 
     "00100110", 
     "00110110", 
     "00110110" 
    }; 

cevap

3

İlk olarak, statik olmak için veri kaynaklarınıza ihtiyacınız vardır. Bu bir NUnit 3 gereksinimi.

Bunu yaptıktan sonra, her bir parametrenizde ValueSource attribute kullanabilirsiniz. Örneğin,

[Test, Sequential] 
public void TestMethodIntToBin([ValueSource(nameof(ToConvert))] int intToConvert, 
           [ValueSource(nameof(ResultList))] string result) 
{ 
    // Asserts 
} 

Sequential attribute

Eğer NUnit sırayla değerleri seçerek test durumları oluşturmak istediğinizi belirtir. Diğer seçenekler, varsayılan veya Pairwise değerlerinin her birleşimine neden olan ve tüm olası çiftler için yalnızca vakalar oluşturan Combinatorial'dur. Sizin durumunuzda, iki veri kaynağınızı bir araya getirip TestCaseSource attribute'u kullanarak birleştirme yapmanızı tavsiye ederim. Visual Studio 2015 kullanmıyorsanız C# 6 için NameOf() operatörünü kullanıyorum

[TestCaseSource(nameof(Conversions))] 
public void TestMethodIntToBin(int intToConvert, string result) 
{ 
    // Asserts 
} 

static object[] Conversions = { 
    new object[] { 12, "00110110" }, 
    new object[] { 13, "00110110" } 
} 

Not sadece dizeleri geçin.

+0

bu durum için belki daha basit bir diğer alternatif,: [TestCaseSource (NameOf (Dönüşümler))] public void TestMethodIntToBin (int intToConvert, dizge sonuç) { // İddiası } statik bir amacı [] Dönüşüm = { yeni nesne [] {12, "00.110.110"}, yeni nesne [] {13, "00.110.110 "} } – Charlie

+0

Önceliği yoksayma ... düzenleme konusunda sorun yaşama. – Charlie

3

Bu sitedeki yorumların içine kod koyamıyorum, bu yüzden Rob'un cevabıyla ilgili bir yorum olmasına rağmen bunu ayrı bir yanıt olarak gönderiyorum. sizin özel durumda

, hiç TestCaseSource gerekmez ... Bu düşünün:

[TestCase(12, "00110110")] 
[TestCase(13, "00110110")] 
public void TestMethodIntToBin(int intToConvert, string result) 
{ 
    // Asserts 
} 
+0

Charlie'nin belirttiği gibi, bu muhtemelen gönderdiğiniz örnek kod için en kolay sözdizimidir. Test kodunuz dinamik olarak oluşturulmadığı veya harici bir sistemden gelmediği sürece tercih edilen yöntem budur. –