2010-06-28 17 views
5

मैं वीबीएनईटी और एनयूनीट के साथ टीडीडी सीख रहा हूं। मैं जानना चाहता हूं कि सबसे अच्छी बात क्या है: परीक्षण विधि के अंदर बहुत सारे आवेषण विधियों का उपयोग करें या प्रति विधि एक जोर दें?वीबीएनईटी और एनयूनीट - टीडीडी

यह मेरा कोड है। धन्यवाद।

Imports NUnit.Framework 

<TestFixture()> _ 
Public Class CalculatorTest 
<Test()> _ 
Public Sub TestAdd() 
    Dim calculator As Calculator = New Calculator() 

    Assert.AreEqual(2, calculator.sum(1, 1)) 
    Assert.AreNotEqual(3, calculator.sum(2, 2)) 
    Assert.AreEqual(-1, calculator.sum(0, -1)) 
     Assert.AreNotEqual(3, calculator.sum(1, 1)) 
    End Sub 
End Class 

उत्तर

5

आमतौर पर स्वीकृत 'सर्वश्रेष्ठ अभ्यास' प्रति परीक्षण एक जोर है। (रॉय Osherove के अनुसार)

हालांकि, इस विशेष परीक्षण थोड़ा और बस testcases का उपयोग कर NUnit के साथ किया जा सकता है:

<Test()> _ 
<TestCase(1, 1, 2)> _ 
<TestCase(1,-1, 0)> _ 
<TestCase(0,-1,-1)> _ 
Public Sub Calculator_Add_ReturnsExpectedResult(Integer a, Integer b, Integer expected) 
    Dim calculator As Calculator = New Calculator() 

    Assert.AreEqual(expected, calculator.sum(a, b)) 
End Class 

इसके अलावा नामकरण मैं वहाँ इस्तेमाल किया ध्यान दें, क्रम में वास्तव में क्या परीक्षण स्पष्ट करने के लिए परीक्षण कर रहा है

"एक आर्ट प्रति टेस्ट" अभ्यास के पीछे प्रिंसिपल यह है कि आप कुछ विशिष्ट अर्थ का असफल परीक्षण चाहते हैं। यही है, प्रत्येक परीक्षण आपको बताएगा कि क्या एक विशिष्ट चीज काम कर रही है।

+0

<टेस्टकेस (1, 1, 2)> _: इसका क्या अर्थ है? धन्यवाद। – Thomas

+0

इसका मतलब है कि यह आपके परीक्षण समारोह को कई बार कॉल करेगा, प्रत्येक अलग-अलग इनपुट (जैसा कि एनोटेशन में निर्दिष्ट है) के साथ। इस मामले में यह इसे तीन बार कॉल करेगा, पहले (1,1,2) के साथ (1, -1,0) और अंत में (0, -1, -1) के साथ। –

+0

धन्यवाद, मुझे मिल गया! – Thomas

0

यह एक दिलचस्प बहस है, और शैली के मामले में आ सकती है। मुझे रॉय ओशरोव के विचार पसंद हैं, कि आपको प्रति यूनिट परीक्षण में केवल एक जोर देना चाहिए।

इस समस्या की अपनी गहन चर्चा here पढ़ें।

इसके अलावा, this बाहर देखें।

+0

यह वास्तव में एक "बहस" और शैली की चर्चा के अधिक नहीं है। मैं प्रत्येक परीक्षण में कई आवेषण पसंद करता हूं, और पाते हैं कि अधिकांश वास्तविक विश्व इकाई परीक्षणों को किसी दिए गए परीक्षण के लिए सभी मान्यताओं को साफ़ करने के लिए एक से अधिक जोर की आवश्यकता होगी। –

+0

धन्यवाद, मैं इसे पढ़ूंगा! – Thomas

7

इसके बारे में सोचने का एक बेहतर तरीका एक समय में एक चीज का परीक्षण करना है। उस चीज का परीक्षण करने के लिए जरूरी कई आवेषणों का प्रयोग करें, लेकिन आम तौर पर केवल एक ही। एकाधिक आवेषण एक संकेत हो सकते हैं कि आप एक समय में एक से अधिक चीज़ों का परीक्षण कर रहे हैं लेकिन यह मेरी राय में, एक कठिन और तेज़ नियम नहीं है। सबसे अच्छी मार्गदर्शिका यह है कि आप स्वतंत्र रूप से अवधारणाओं के बीच अपने परीक्षणों में निर्भरताएं नहीं बनाना चाहते हैं।

आपके उदाहरण में आप वास्तव में 4 चीजों का परीक्षण कर रहे हैं, यद्यपि आपको वास्तव में केवल दो की आवश्यकता होती है क्योंकि वे एक ही जमीन को कवर करते हैं। मैं परीक्षण का सुझाव दूंगा कि क्या होता है जब आप दो सकारात्मक संख्याओं, दो नकारात्मक संख्याओं, और ऋणात्मक और सकारात्मक और सकारात्मक परिणामों के साथ सकारात्मक जोड़ते हैं। तब मैं गणितीय गुणों और परीक्षण कम्यूटिटी और additive पहचान (शून्य) के बारे में सोचता हूं। अंत में, मैं सीमा की स्थिति का परीक्षण करता हूं - सकारात्मक और नकारात्मक अतिप्रवाह, आदि नोट, यह व्यापक हो सकता है या नहीं, यानी, मुझे लगता है कि मैंने आधार को कवर किया है, लेकिन मैं पूरी तरह से कठिन होने की कोशिश नहीं कर रहा हूं ; मैं बस यह बताने के लिए चाहता हूं कि आप किस परीक्षण के बारे में सोचने के बारे में सोचेंगे और, हाँ, मैं इन अलग-अलग परीक्षणों को एक ही जोर से कर दूंगा।

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

+0

एक महान स्पष्टीकरण। धन्यवाद! – Thomas

0

ओशरोव के विचार मौलिकता की धड़कन। उदाहरण के लिए, यदि कोई फ़ंक्शन एक संरचना/कक्षा देता है, तो आपको या तो कई आवेषणों का उपयोग करना होगा, या एक कस्टम संरचना को दृढ़ता से तुलना करना होगा, जो वास्तव में वही काम कर रहा है।

महत्वपूर्ण बात यह है कि कार्यक्षमता क्या है इसका परीक्षण करना है। और शायद हमेशा "विशेषज्ञों" से सवाल करने के लिए।