2010-12-03 8 views
23

मैं इसवॉल्यूम के रूप में डेटटाइम को यूनिट टेस्ट में कैसे सेट करें?

[Test] 
public void Test([Values(new DateTime(2010, 12, 01), 
         new DateTime(2010, 12, 03))] DateTime from, 
       [Values(new DateTime(2010, 12, 02), 
         new DateTime(2010, 12, 04))] DateTime to) 
{ 
    IList<MyObject> result = MyMethod(from, to); 
    Assert.AreEqual(1, result.Count); 
} 

की तरह कुछ करना चाहता हूँ लेकिन मैं मापदंडों

एक विशेषता तर्क एक निरंतर अभिव्यक्ति होना चाहिए के बारे में निम्नलिखित त्रुटि मिलती है, typeof एक

की अभिव्यक्ति या सरणी निर्माण अभिव्यक्ति

कोई सुझाव?


अद्यतन: NUnit में पैरामिट्रीकृत परीक्षण के बारे में अच्छा लेख 2,5
http://www.pgs-soft.com/new-features-in-nunit-2-5-part-1-parameterized-tests.html

उत्तर

25

अपने यूनिट परीक्षण को फुलाए जाने का एक विकल्प, आप TestCaseSource विशेषता का उपयोग कर TestCaseData के निर्माण को ऑफ़लोड कर सकते हैं।

टेस्टकेस स्रोत विशेषता आपको कक्षा में एक विधि को परिभाषित करने देती है जिसे एनयूनीट द्वारा बुलाया जाएगा और विधि में बनाए गए डेटा को आपके परीक्षण मामले में पारित किया जाएगा।

यह सुविधा NUnit 2.5 में उपलब्ध है और आप here और जानें ...

[TestFixture] 
public class DateValuesTest 
{ 
    [TestCaseSource(typeof(DateValuesTest), "DateValuesData")] 
    public bool MonthIsDecember(DateTime date) 
    { 
     var month = date.Month; 
     if (month == 12) 
      return true; 
     else 
      return false; 
    } 

    private static IEnumerable DateValuesData() 
    { 
     yield return new TestCaseData(new DateTime(2010, 12, 5)).Returns(true); 
     yield return new TestCaseData(new DateTime(2010, 12, 1)).Returns(true); 
     yield return new TestCaseData(new DateTime(2010, 01, 01)).Returns(false); 
     yield return new TestCaseData(new DateTime(2010, 11, 01)).Returns(false); 
    } 
} 
3

कि छह पैरामीटर स्वीकार कस्टम विशेषता को परिभाषित करें और उसके बाद के रूप में

[Values(2010, 12, 1, 2010, 12, 3)] 

इसका इस्तेमाल और उसके बाद का निर्माण तदनुसार DateTime के आवश्यक उदाहरण।

या आप

[Values("12/01/2010", "12/03/2010")] 

कर सकता है कि के रूप में एक छोटे से अधिक पठनीय और पोषणीय हो सकता है।

त्रुटि संदेश कहता है, विशेषता मान गैर-स्थिर नहीं हो सकते हैं (वे असेंबली के मेटाडेटा में एम्बेडेड हैं)। उपस्थितियों के विपरीत, new DateTime(2010, 12, 1) निरंतर अभिव्यक्ति नहीं है।

15

बस स्ट्रिंग स्थिरांक के रूप में दिनांक गुजरती हैं और अपने परीक्षण के अंदर पार्स कर सकते हैं। थोड़ा परेशान लेकिन यह सिर्फ एक परीक्षण है इसलिए चिंता न करें।

[TestCase("1/1/2010")] 
public void mytest(string dateInputAsString) 
{ 
    DateTime dateInput= DateTime.Parse(dateInputAsString); 
    ... 
} 
+5

(अपने लोकेल से सावधान रहें) – AndyM

+0

त्वरित और गंदा, लेकिन मुझे यह पसंद है। – openshac

संबंधित मुद्दे