क्या यूनिट परीक्षणों को भंडार में संग्रहित किया जाना चाहिए?


50

मैं एक बढ़ता हुआ प्रोग्रामर हूं, जो अंततः एक लाइब्रेरी के लिए अभ्यास में यूनिट परीक्षण कर रहा हूं जो कि मैं GitHub पर संग्रहीत कर रहा हूं।

यह मेरे साथ हुआ कि मैं रेपो में परीक्षण सूट शामिल कर सकता हूं, लेकिन जैसा कि मैं अन्य परियोजनाओं के आसपास देखता हूं, परीक्षणों का समावेश हिट-या-मिस लगता है।

क्या यह बुरा रूप माना जाता है? क्या यह विचार है कि उपयोगकर्ता केवल काम करने वाले कोड में रुचि रखते हैं और वे वैसे भी अपने ढांचे में परीक्षण करेंगे?


13
क्यों नहीं? परीक्षण परियोजना के साथ आने चाहिए या वे मुश्किल से बेकार हैं।

61
तथ्य यह है कि कुछ परियोजना में उनके भंडार में इकाई परीक्षण शामिल नहीं हैं, पहली बार में इन परीक्षणों के अस्तित्व में नहीं होने के कारण अधिक संभावना है।
प्रैसपस

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

2
@stoupa बहुत निश्चित रूप से सही है: यह सबसे अच्छा मानने के लिए प्यारा होगा, कि कहीं दूर परीक्षण का एक अद्भुत कैश है, लेकिन वास्तविक दुनिया में, प्रोग्रामर आलसी हैं।
Cascabel

2
ध्यान दें, कि मैं आपकी बिल्ड स्क्रिप्ट में टेस्ट क्लास संकलन को अक्षम करने के लिए इसे एक अच्छा विचार मानूंगा।
user606723

जवाबों:


119

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

परीक्षण कोड को उत्पादन कोड से अच्छी तरह से अलग किया जाना चाहिए, हालांकि। उदाहरण के लिए मावेन विभिन्न फ़ोल्डरों में उत्पादन और परीक्षण कोड डालकर इसे प्राप्त करता है। सवाल "यह उत्पादन का हिस्सा है या परीक्षण कोड का" कभी नहीं उठना चाहिए।

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


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

टेस्ट न केवल कोड का हिस्सा है, बल्कि प्रलेखन का भी हिस्सा है, और अक्सर कल्पना का हिस्सा है। परीक्षण (जो चलाते हैं और पास होते हैं) "जीवित दस्तावेज" हैं।
माइकल ईस्टर

54

यदि आप चेक-इन स्रोत कोड में इकाई परीक्षण शामिल नहीं करते हैं, तो:

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

नीचे की रेखा, मैं आधिकारिक स्रोत कोड रिपॉजिटरी में लिखी गई किसी भी यूनिट के परीक्षण को शामिल नहीं करूंगा ।


7

बेशक आपको कई कारणों से रिपॉजिटरी में यूनिट टेस्ट देना चाहिए:

  • पिछले संस्करण पर वापस लौटना आसान है
  • परियोजना पर काम कर रहे अन्य लोग भी यूनिट परीक्षणों तक पहुंच प्राप्त करते हैं
  • कुछ लोग इकाई परीक्षणों को प्रलेखन (TDD और BDD) का हिस्सा मानते हैं

6

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

मैं उन अधिकांश परियोजनाओं पर दृढ़ता से संदेह करता हूँ, जिनमें भंडार में परीक्षण शामिल नहीं हैं, बस किसी के पास नहीं है।

अलग मॉड्यूल के रूप में परीक्षण करने का एक कारण हो सकता है, इसलिए आप पुराने कोड के खिलाफ आसानी से नए परीक्षण चला सकते हैं। यह कमांड-लाइन के माध्यम से एपीआई-स्थिर पुस्तकालय या ब्लैक-बॉक्स परीक्षणों के लिए उपयोगी होगा; संकलित भाषाओं के लिए उपयोगिता जहां नए परीक्षण संभवतः पुराने कोड के साथ संकलित नहीं होंगे।


5

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


3

मैंने सिर्फ "ब्राउनफील्ड एप्लीकेशन डेवलपमेंट इन। नेट" पढ़ना शुरू कर दिया है , और यह एक एप्लिकेशन की संरचना की कुछ उत्कृष्ट सलाह प्रदान करता है, जिसमें स्रोत नियंत्रण और जहां / कैसे / क्यों यूनिट परीक्षण शामिल हैं (विशेष रूप से कंटीन्यूअस इंटीग्रेशन के क्षेत्र में) शामिल हैं। । यदि आप एक .Net डेवलपर हैं, तो मैं इसकी सलाह दूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.