2011-05-29 13 views
6

मेरे पास एक स्थिर वर्ग है जिसका उपयोग मैं अपने परीक्षण डेटा को रखने के लिए कर रहा हूं। जब मैं अपने एनयूनीट परीक्षणों में इसका संदर्भ देता हूं, तो मेरे द्वारा किए गए कोई भी परिवर्तन परीक्षणों में बने रहते हैं।NUnit परीक्षणों में स्थिर डेटा रखने

उदाहरण के लिए, मैं अपने परीक्षण में इस कोड है:

public static class SampleData { 
    public static OrderDto OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; 
} 

पहली बार मैं इसे चलाने, orderDto 0 ORDERDETAILS है:

OrderDto orderDto = SampleData.OrderDto; 
OrderDetailDto orderDetailDto = SampleData.OrderDetailDto; 
orderDto.OrderDetails.Add(orderDetailDto); 

और नमूना डेटा कुछ इस तरह है। दूसरी बार इसमें 1, फिर 2, आदि है। मैंने एनयूनीट परीक्षणों के बीच सोचा था, कुछ भी जारी नहीं था। क्या यह स्थिर गुणों को कैश करता है?

उत्तर

9

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

अधिकांश यूनिट परीक्षण ढांचे परीक्षण से पहले और बाद में आपके राज्य को निष्क्रिय और साफ करने का एक तरीका प्रदान करते हैं। न्यूनिट में, ऐसा करने का तरीका [SetUp] विशेषता के साथ एक विधि है। प्रत्येक विधि से पहले इस विधि को निष्पादित किया जाता है।

मुझे लगता है कि आप जो हासिल करना चाहते हैं उसे प्राप्त करने का सबसे आसान तरीका TestSetup में सदस्य फ़ील्ड प्रारंभ करना है और विभिन्न परीक्षणों के बीच इसका उपयोग करना है। ध्यान दें कि हम यहां एक स्थिर सदस्य का उपयोग नहीं करते हैं, जिसका अर्थ है कि हमें परीक्षण के बाद इसे साफ नहीं करना है।

[TestFixture] 
public class MyTests { 

    OrderDto OrderDto; 
    OrderDetailDto; 
    [SetUp] 
    public void Setup() { 
    _OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; 
    _OrderDetailDto = new OrderDetailDto {/*Sample data*/}; 
    } 

    [Test] 
    public void TestOrderDetailIsAddedToOrder() { 
    orderDto.OrderDetails.Add(_OrderDetailDto); 
    } 
} 
0

मुझे लगता है कि मैंने थोड़ा और झुकाव के साथ अपने स्वयं के प्रश्न का उत्तर दिया। अभी तक सुनिश्चित नहीं क्यों यह वस्तु को अद्यतन करने गया था, लेकिन अगर मैं यह करने के लिए स्थिर वर्ग बदलने के लिए, यह काम करता है:

public static class SampleData { 
    public static OrderDto OrderDto { 
     get { return new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; } 
    } 
} 
+5

यह स्थैतिक वस्तु को अद्यतन कर रहा था क्योंकि एक उदाहरण था और यही आपके परीक्षणों ने किया था। यूनिट परीक्षण सामान्य कोड की तरह हैं; यदि वे एक स्थिर क्षेत्र को अद्यतन करते हैं तो फ़ील्ड अपडेट हो जाता है। अब जब भी इस विधि को बुलाया जाता है, तो आप एक नया उदाहरण लौट रहे हैं, जिसका अर्थ है कि परिवर्तन केवल वर्तमान उदाहरण को प्रभावित करते हैं। – TrueWill

6

टेस्ट अलग करना चाहिए, लेकिन इसका मतलब यह नहीं है कि वे अपने आप कर रहे हैं।

एनयूनीट प्रत्येक टेस्ट और [टीयरडाउन] के बाद [सेटअप] के साथ टैग किए गए टेस्टफिक्चर की एक विधि चलाएगा। आप अपनी स्थिरता सेट अप करने के लिए इस और अन्य NUnit attributes का उपयोग कर सकते हैं।