2008-10-16 16 views
12

मैं सी # (fibonacci heap का उपयोग कर प्राथमिकता कतार) में डेटा संरचना लिख ​​रहा हूं और मैं इसे टीडीडी के लिए सीखने के अनुभव के रूप में उपयोग करने की कोशिश कर रहा हूं, जिसे मैं काफी नया हूं।इकाई डेटा संरचना का परीक्षण

मैं समझता हूं कि प्रत्येक परीक्षण को कक्षा के एक टुकड़े का परीक्षण करना चाहिए ताकि एक इकाई में विफलता मुझे कई परीक्षण विफलताओं से भ्रमित न करे, लेकिन मुझे यकीन नहीं है कि डेटा की स्थिति कब होती है एक परीक्षण के लिए संरचना महत्वपूर्ण है।

उदाहरण के लिए

,

private PriorityQueue<int> queue; 

[SetUp] 
public void Initialize() 
{ 
    this.queue = new PriorityQueue<int>();  
} 

[Test] 
public void PeekShouldReturnMinimumItem() 
{ 
    this.queue.Enqueue(2); 
    this.queue.Enqueue(1); 

    Assert.That(this.queue.Peek(), Is.EqualTo(1)); 
} 

यदि या तो कतारबद्ध या पीक तोड़ दिया इस परीक्षा टूट जाएगा।

मैं सोच रहा था कि मैं किसी भी तरह से टेस्ट मैन्युअल रूप से अंतर्निहित डेटा संरचना के ढेर को स्थापित कर सकता हूं, लेकिन मुझे यकीन नहीं है कि दुनिया को कार्यान्वयन के बिना इसे कैसे किया जाए।

क्या ऐसा करने का कोई बेहतर तरीका है? अन्य भागों पर निर्भर है ठीक है?

संपादित करें: मेरे पास एक सेटअप है, बस सादगी के लिए इसे छोड़ दिया है।

उत्तर

7

कक्षा के लिए अपनी परीक्षा प्रोजेक्ट में एक निजी एक्सेसर जोड़ें। ऐसा करने के लिए कक्षा विधियों का उपयोग करने के बजाय कुछ ज्ञात तरीके से कक्षा के निजी गुणों को स्थापित करने के लिए एक्सेसर का उपयोग करें। जैसा कि @ स्टेवन ए लोवे ने इंगित किया है, परीक्षणों के बीच आवश्यक किसी भी प्रारंभिकता को करने के लिए आपको अपनी टेस्ट क्लास पर सेटअप/टियरडाउन विधियों का उपयोग करने की भी आवश्यकता है। मैं वास्तव में टेस्ट मामलों के बीच युग्मन को कम करने के लिए परीक्षणों के बीच पुन: उपयोग करने के बजाय प्रत्येक परीक्षण में कतार को पुनर्जीवित करना पसंद करूंगा।

+0

अधिक विशिष्ट होने के लिए अपवोट - और मेरा नाम सही वर्तनी ;-) –

+0

तो मैं इस निजी एक्सेसर का उपयोग कैसे करूं? प्रतिबिंब? या InternalsVisible जादू करने के लिए? –

+0

आंतरिक उपयोग करें VISibleTo –

2

मुझे लगता है कि यह ठीक है; लेकिन अपनी टेस्ट विधि की शुरुआत में कतार साफ़ करें ;-)

3

सैद्धांतिक रूप से, आप केवल एक ही समय में एक ही सुविधा का परीक्षण करना चाहते हैं। हालांकि, अगर आपकी कतार में केवल कुछ विधियां हैं (एनक्यू, पीक, डेक्यू, गिनती) तो आप केवल एक विधि का उपयोग करते समय अपने परीक्षणों में सीमित हैं।

यह आप नहीं समस्या अति-इंजीनियर है और सरल हो (जैसे कि एक के रूप में) के लिए कुछ सरल परीक्षण मामलों बना सकते हैं और उसके ऊपर का निर्माण विभिन्न सुविधाओं की एक उचित कवरेज सुनिश्चित करने के लिए सबसे अच्छा है।

मुझे लगता है कि कई विशेषताओं को कवर करने वाले परीक्षणों को लिखना उचित है, जब तक आपके पास कुछ ऐसा है जो उपयोग की गई सुविधाओं में से एक तोड़ दिया जाता है। इसलिए, यदि आपके पास एक टेस्ट सूट है और आप अपने एनक्यू को तोड़ते हैं, जाहिर है, आपके सभी परीक्षण (या उनमें से अधिकतर असफल हो जाएंगे), लेकिन आपको पता चलेगा कि आपके सरल परीक्षणों के कारण एनक्यू टूट गया है। अपने परीक्षण सूट के परीक्षण के संबंधों को उपेक्षित नहीं किया जाना चाहिए।

+0

दिलचस्प। मुझे सचमुच यकीन नहीं है कि टेस्ट सूट का उपयोग कैसे करें, क्या आप इसे व्यवस्थित करेंगे ताकि सभी एनक्यू परीक्षण एक साथ सूट में हों? –

+0

इसे परीक्षण स्थिरता भी कहा जाता है - यह वह वर्ग है जिसमें परीक्षण विधियां होती हैं। – jop

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