2008-09-06 8 views
17

यदि यूनिट-टेस्ट नाम समय के साथ पुराना हो सकता है और यदि आप मानते हैं कि परीक्षण स्वयं सबसे महत्वपूर्ण बात है, तो क्या बुद्धिमान परीक्षण नाम चुनना महत्वपूर्ण है?यूनिट-टेस्ट नाम महत्वपूर्ण हैं?

यानी

[Test] 
public void ShouldValidateUserNameIsLessThan100Characters() {} 

कविता

[Test] 
public void UserNameTestValidation1() {} 

उत्तर

18

किसी भी विधि का नाम यह स्पष्ट करना चाहिए कि यह क्या करता है।

आईएमओ, आपका पहला सुझाव थोड़ा लंबा है और दूसरा एक पर्याप्त जानकारीपूर्ण नहीं है। इसके अलावा नाम में "100" डालना शायद एक बुरा विचार है, क्योंकि यह बदलने की संभावना है। इसके बारे में:

public void validateUserNameLength() 

यदि परीक्षण में परिवर्तन होता है, तो नाम तदनुसार अपडेट किया जाना चाहिए।

1

मैं की स्थिति है कि परीक्षण के नाम पर पूरा करने के लिए की जरूरत है डाल नहीं है, क्योंकि स्थिति समय में बदल सकते हैं। अपने उदाहरण में, मैं की तरह

UserNameLengthValidate() 

या

UserNameLengthTest() 

या समझाने के लिए क्या परीक्षण करता है कुछ इसी तरह के नामकरण, लेकिन परीक्षण/सत्यापन पैरामीटर मानते हुए नहीं सलाह देते हैं।

2

मुझे लगता है कि अगर किसी को परीक्षण विधि के लिए कोई अच्छा संक्षिप्त नाम नहीं मिल रहा है तो यह एक संकेत है कि इस परीक्षण का डिज़ाइन गलत है। इसके अलावा अच्छी विधि का नाम आपको कम समय में क्या हुआ यह जानने में मदद करता है।

0

नाम के कारण मामले में मामला जरूरी है। मैं बिल्ड से एक ईमेल नहीं चाहता हूं कि परीक्षण 38 9 एफबी 2 बी 5-28ad3 असफल रहा, लेकिन सिर्फ यह जानकर कि यह किसी अन्य चीज़ के विपरीत उपयोगकर्ता नाम परीक्षण था, यह सुनिश्चित करने में मदद करेगा कि सही व्यक्ति निदान करने के लिए सक्षम हो।

1

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

मैं निम्नलिखित पैटर्न का उपयोग करके अपने परीक्षण का नाम देता हूं। प्रत्येक परीक्षण स्थिरता एक वर्ग पर ध्यान केंद्रित करने का प्रयास करती है और आमतौर पर इसका नाम {ClassUnderTest} टेस्ट होता है। मैं प्रत्येक टेस्ट विधि {MemberUnderTest} _ {Assertion} का नाम देता हूं।

[TestFixture] 
public class IndexableFileTest 
{ 
    [Test] 
    public void Connect_InitializesReadOnlyProperties() 
    { 
    // ... 
    } 

    [Test,ExpectedException(typeof(NotInitializedException))] 
    public void IsIndexable_ErrorWhenNotConnected() 
    { 
    // ... 
    } 

    [Test] 
    public void IsIndexable_True() 
    { 
    // ... 
    } 

    [Test] 
    public void IsIndexable_False() 
    { 
    // ... 
    } 
} 
7

बहुत। अच्छी विधि और परिवर्तनीय नाम चुनने के समान ही महत्वपूर्ण है।
अधिकतर यदि आपका परीक्षण सूट भविष्य में नए देवताओं द्वारा संदर्भित किया जा रहा है।

आपके मूल प्रश्न के लिए, निश्चित रूप से उत्तर 1। कुछ और पात्रों में टाइपिंग

  • पठनीयता के लिए भुगतान करने के लिए एक छोटी सी कीमत है। आप और दूसरों के लिए। यह 'मैं क्या सोच रहा था' को खत्म कर दूंगा?'साथ ही' डब्ल्यूटीएफ इस आदमी को इस परीक्षा में मिल रहा है? '
  • जब आप किसी और को ठीक करने के लिए हों तो त्वरित ज़ूम करें
  • किसी भी परीक्षण-सूट विज़िटर के लिए तत्काल अपडेट। यदि सही तरीके से किया जाता है, तो परीक्षण मामलों के नामों पर जाकर इकाई के लिए चश्मा के पाठक को सूचित किया जाएगा।
6

हां।

[Test] 
public void UsernameValidator_LessThanLengthLimit_ShouldValidate() {} 

परीक्षा विषय पहले, परीक्षण विवरण अगला, और अपेक्षित परिणाम अंतिम रखें।
इस तरह, आप यह क्या कर रहा है की एक स्पष्ट संकेत मिलता है, और आप कर सकते हैं आसानी से तरह नाम :) द्वारा

+0

जिस तरह से मुझे यह पसंद है !!! प्रति परीक्षण एक दावे के लिए –

2

हां, परीक्षण नाम के पूरे मुद्दे है कि यह आपको बताता है कि जब काम नहीं करता क्या है परीक्षण विफल रहता है।

0
[RowTest] 
[Row("GoodName")] 
[Row("GoodName2")] 
public void Should_validate_username() 
{ 
} 

[RowTest] 
[Row("BadUserName")] 
[Row("Bad%!Name")] 
public void Should_invalidate_username() 
{ 
} 

यह वास्तव में अधिक जटिल प्रकार के सत्यापन के लिए और अधिक समझ सकता है।

0

हाँ, वे हैं। मैं व्यक्तिगत रूप से SSW's rules to better unit tests को देखने की अनुशंसा करता हूं। इसमें कुछ बहुत उपयोगी नामकरण दिशानिर्देश शामिल हैं।

10

हां, नाम पूरी तरह से महत्वपूर्ण हैं, खासकर जब आप कंसोल या निरंतर एकीकरण सर्वर में परीक्षण चला रहे हैं। जे फील्ड ने post about it लिखा था।

इसके अलावा, one assertion per test के साथ अच्छे परीक्षण नाम दें और आपका सूट आपको विफल होने पर बड़ी रिपोर्ट देगा।

+0

+1 –

1

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

नोट, यह केवल तभी काम करता है जब इकाई परीक्षण बहुत विशिष्ट होते हैं और एक इकाई परीक्षण के भीतर बहुत अधिक मान्य नहीं होते हैं।

उदाहरण के लिए

तो:

[Test] 
void TestThatExceptionIsRaisedWhenStringLengthLargerThen100() 

[Test] 
void TestThatStringLengthOf99IsAccepted() 
5

Clean Code में, पृष्ठ 124, Robert C. Martin लिखते हैं:

कहानी का नैतिक सरल है: टेस्ट कोड बस के रूप में उत्पादन कोड के रूप में महत्वपूर्ण है। यह एक द्वितीय श्रेणी का नागरिक नहीं है। इसके लिए विचार, डिजाइन और देखभाल की आवश्यकता है। इसे उत्पादन कोड के रूप में साफ रखा जाना चाहिए।

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