2010-05-16 9 views
6

मैं विजुअल स्टूडियो के साथ टेस्ट ड्राइव डेवलपमेंट में अपना पहला कदम बना रहा हूं। वीएस 2010 के साथ जेनेरिक कक्षाओं को कार्यान्वित करने के बारे में मेरे कुछ प्रश्न हैं।विजुअल स्टूडियो 2010 और टेस्ट ड्राइव डेवलपमेंट

सबसे पहले, मान लीजिए कि मैं एक ऐरेलिस्ट के अपने संस्करण को कार्यान्वित करना चाहता हूं।

[TestMethod] 
public void Add_10_Items_Remove_10_Items_Check_Size_Is_Zero() { 
    var myArrayList = new MyArrayList<int>(); 

    for (int i = 0; i < 10; ++i) { 
     myArrayList.Add(i); 
    } 

    for (int i = 0; i < 10; ++i) { 
     myArrayList.RemoveAt(0); //should this mean RemoveAt(int) or RemoveAt(T)? 
           //VS doesn't know. Any work arounds? 
    } 

    int expected = 0; 
    int actual = myArrayList.Size; 
    Assert.AreEqual(expected, actual); 
} 

मैं हिट करने के लिए

ctrl + VS 2010 क्षमता का उपयोग कर रहा: मैं निम्नलिखित परीक्षण (मैं इस मामले MSTest में उपयोग कर रहा हूँ) बनाने के द्वारा शुरू करते हैं।

और इसे चलने पर कक्षाएं/विधियां लागू करें।

  1. जेनेरिक कक्षाओं को लागू करते समय मुझे कुछ परेशानी हो रही है। उदाहरण के लिए, जब मैं .Add(10) विधि को परिभाषित करता हूं, तो वीएस को पता नहीं है कि क्या मैं एक सामान्य विधि (जैसे क्लास सामान्य है) या Add(int number) विधि का इरादा रखता हूं। क्या इसे अलग करने का कोई तरीका है?
  2. वही प्रकार के साथ हो सकता है। आइए मान लें कि मैं MyStack स्टैक को कार्यान्वित कर रहा हूं और मैं परीक्षण करना चाहता हूं कि यदि मैं पुश और तत्व के बाद इसे पॉप करता हूं, तो स्टैक अभी भी खाली है। हम सभी जानते हैं कि पॉप को कुछ वापस करना चाहिए, लेकिन आमतौर पर, इस परीक्षण के कोड को इसकी परवाह नहीं करनी चाहिए। विजुअल स्टूडियो तब सोचता है कि पॉप एक शून्य विधि है, जो वास्तव में नहीं चाहता कि कोई क्या चाहता है। इससे निपटने के लिए कैसे? प्रत्येक विधि के लिए, क्या मुझे ऐसे परीक्षण करके शुरू करना चाहिए जो "बहुत विशिष्ट" हैं, जैसे कि यह स्पष्ट है कि विधि को कुछ वापस करना चाहिए, इसलिए मुझे इस तरह की अस्पष्टता नहीं मिलती है? भले ही परिणाम का उपयोग न करें, क्या मेरे पास int popValue = myStack.Pop() जैसा कुछ होना चाहिए?
  3. सामान्य कक्षाओं में मुझे परीक्षण कैसे करना चाहिए? केवल एक सामान्य प्रकार के प्रकार के साथ परीक्षण करें? मैं int एस का उपयोग कर रहा हूं, क्योंकि उनका उपयोग करना आसान है, लेकिन क्या मुझे विभिन्न प्रकार की वस्तुओं के साथ परीक्षण करना चाहिए? आप आमतौर पर इस पर कैसे जाते हैं?
  4. मुझे लगता है कि .NET के लिए TestDriven नामक एक लोकप्रिय उपकरण है। वीएस 2010 रिलीज के साथ, क्या यह अभी भी उपयोगी है, या इसकी कई विशेषताएं अब वीएस 2010 का हिस्सा हैं, जो इसे थोड़ी बेकार प्रदान करती है?
  5. जब भी मैं अपने परीक्षण कोड में एक नई संपत्ति को परिभाषित करता हूं, और मेरे लिए उस विधि को उत्पन्न करने के लिए वीएस से पूछता हूं, यह गेटटर और एक सेटटर दोनों उत्पन्न करता है। अगर मेरे पास int val = MyClass.MyProperty जैसा कुछ है तो मैं समझना चाहता हूं कि (कम से कम अभी तक) मैं केवल गेटर को परिभाषित करना चाहता हूं।

धन्यवाद

+0

# 4 के लिए, क्या आप अंदरूनी दृश्य स्टूडियो से परीक्षण चलाने या सामान्य रूप से परीक्षण चलाने के लिए मतलब है? विजुअल स्टूडियो के अंदर – R0MANARMY

+0

। –

+0

आईवी आपके पास 5 अलग-अलग प्रश्न हैं, क्या यह हर किसी के जीवन को अलग प्रश्न के रूप में पोस्ट करने में आसान नहीं होगा? –

उत्तर

3

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

यह अभी भी आप अलग अलग इकाई परीक्षण चौखटे (nunit, mbunit, xunit, csunit, आदि) के एक नंबर से एक का उपयोग मामले में उपयोगी है।

अन्य उपकरण भी हैं (जैसे Visual Nunit) जो यूनिट परीक्षण चलाने के लिए दृश्य स्टूडियो एकीकरण प्रदान करते हैं।

+0

मैंने चैनल 9 पर जो देखा है, उससे आप वीएस 2010 के साथ कई ढांचे का भी उपयोग कर सकते हैं। लेकिन मैंने इसका परीक्षण करने की कोशिश नहीं की है। –

+0

@devoured elysium: मुझे NUnit परीक्षण चलाने के लिए विजुअल स्टूडियो परीक्षण धावक मिला है। एमएसटीएस्ट के साथ समस्या यह हो सकती है कि आप (या नहीं) चल सकते हैं, यदि आप निरंतर एकीकरण सर्वर (जैसे टीमसिटी या क्रूज़ कंट्रोल.नेट) चाहते हैं तो आप सर्वर पर विजुअल स्टूडियो इंस्टॉल किए बिना एमएसटीएस्ट यूनिट परीक्षण चलाने में सक्षम नहीं होंगे (जो एक कष्टप्रद आवश्यकता है)। – R0MANARMY

+0

क्या आपके पास एक ब्लॉग पोस्ट है कि आपको Visual NUnit का उपयोग करके VS2010 w/o के अंदर NUnit परीक्षण कैसे चल रहा है? :) मैं इसके साथ कुछ समस्याओं में भाग रहा हूं, इसलिए अन्य विकल्पों की जांच करना चाहूंगा। – Dave

3

अपने कोड नमूने के लिए, आपके पास एक विधि RemoveAt(T obj) क्यों होगी?

आप RemoveAt(int index) और Remove(T obj) इसके बजाय कर सकते हैं।माइक्रोसॉफ्ट के एपीआई पर एक नज़र डालें (उदाहरण के लिए, for List<T>) जो देखते हैं कि वे एक सामान्य संग्रह के लिए निकालें विधियों को कैसे सेट करते हैं।

और अब अपने अंक के लिए:

1: क्या Add(int number) करना होगा? अगर मैं आपके इरादों को सही ढंग से समझता हूं, Add(10) केवल "मेरे संग्रह के अंत में मूल्य 10 जोड़ें" के रूप में छेड़छाड़ की जा सकती है। यदि आप किसी विशेष इंडेक्स पर कोई मान जोड़ना चाहते हैं, तो आप उस विधि को नाम दे सकते हैं (और शायद चाहिए) उस विधि को सम्मिलित करें: Insert(int index, T value)

2: सुनिश्चित करें, विजुअल स्टूडियो पहली बार में शून्य के रूप में विधि की व्याख्या करेगा, लेकिन आप की तरह

public class MyStack<T> 
{ 
    public T Pop() 
    { 
    } 
} 

होने के लिए इसे संपादित कर सकते कुछ स्टब्स Ctrl+. दबाकर बनाया एक सुविधा है, लेकिन नहीं सुसमाचार हैं। आपको हमेशा एक चर के लिए वापसी मान असाइन करने की आवश्यकता नहीं है। यदि आपको किसी परीक्षण में इसकी आवश्यकता नहीं है, तो ऐसा न करें। यदि आप वीएस को शून्य के अलावा रिटर्न टाइप पर लेना चाहते हैं, तो आप एक अलग यूनिट टेस्ट लिख सकते हैं (उदा। कि पॉप() अंतिम धक्का मान देता है)।

3: मैं उन प्रकारों के साथ परीक्षण करता हूं जिन्हें मैं अक्सर अपने कोड में उपयोग करता हूं। यदि आप एक सार्वजनिक एपीआई लिख रहे हैं, तो जितना संभव हो उतने प्रकार के साथ परीक्षण करें। यदि आप NUnit का उपयोग कर रहे हैं, तो कुछ डुप्लिकेट कोड लिखने से बचने में आपकी सहायता के लिए [TestCase] विशेषता का उपयोग करके देखें।

4: मैं अभी भी TestDriven उपयोग करते हैं, लेकिन मैं इसे बिना जा रहा प्रयास नहीं किया है, इसलिए मैं वास्तव में एक उपयोगी तुलना नहीं कर सकते।

5: यदि आपको इसकी आवश्यकता नहीं है तो बसटर को हटाएं। कुछ एडन फ्रेमवर्क जैसे ReSharper केवल पढ़ने योग्य गुणों सहित अधिक उन्नत कोड पीढ़ी का समर्थन करते हैं।

+0

प्रश्नों को दोबारा पढ़ें। आप को पूरी तरह से कर रहे हैं बंद point.I एक RemoveAt (int) चाहते हैं, लेकिन के रूप में उपयोग किया जा रहा एक MyArrayList (), दृश्य स्टूडियो पता नहीं है कि कौन सी विधि मैं लागू करना चाहते हैं .. –

+0

@devoured Elysium: अपने MyArrayList कैसे है कक्षा परिभाषित? इस मामले में लागू करने के लिए कौन सी विधि के बीच कोई भ्रम नहीं होना चाहिए क्योंकि केवल एक RemoveAt() है और यह सरणी में एक अनुक्रमणिका स्वीकार करता है। यदि आप अपनी सूची से एक पूर्णांक मान को हटाना चाहते हैं, तो आप इसके बजाय निकालें() का उपयोग करेंगे। –

+0

यहां मेरे प्रश्न अधिकतर कक्षाओं को विकसित करने के तरीके पर नहीं, वीएस 2010 स्टब पीढ़ी की विशेषताओं से संबंधित हैं। वैसे भी, मैं एक एड (टी तत्व) और RemoveAt (int सूचकांक) चाहता हूँ। –

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