जवाबों:
आपके परीक्षणों का आयोजन कैसे किया जाता है, बल्कि महत्वहीन होने के कारण उन्हें बिल्कुल महत्व नहीं दिया जाता है।
एक अच्छे टेस्ट सूट के लिए सबसे महत्वपूर्ण बात यह है कि यह सभी कार्यक्षमता को कवर करता है; यह सुनिश्चित करता है कि जब भी एक प्रतिगमन दोष पेश किया जाता है, तो आप तुरंत नोटिस करेंगे। चाहे प्रत्येक विधि के लिए एक परीक्षण लिखना हो, किसी विधि के प्रत्येक इनपुट मूल्य संयोजन के लिए एक परीक्षण, या उस पद्धति के भीतर प्रत्येक संभव कोड पथ के लिए एक परीक्षण भी कम महत्वपूर्ण नहीं है। चाहे इन परीक्षणों को कुछ या कई परीक्षण कक्षाओं में व्यवस्थित करना और भी कम महत्वपूर्ण है: एक परीक्षण सूट को हमेशा पूर्ण रूप से सफल होना चाहिए, इसलिए इससे कोई फर्क नहीं पड़ता कि यह सत्रह परीक्षणों में से तीन या दो में से एक में विफल रहता है - दोनों गलत हैं और होना चाहिए तय की।
बेशक, परीक्षण कोड भी कोड है, इसलिए इसे बनाए रखने योग्य, मॉड्यूलर आदि के लिए सामान्य सर्वोत्तम प्रथाओं का पालन करना चाहिए, लेकिन यह तय किया जाना चाहिए कि परीक्षण सूट कितनी अच्छी तरह से बनाए रखा जा सकता है, न कि यह परीक्षण कक्षाओं से कैसे संबंधित है वे परीक्षण करते हैं। आपके द्वारा उल्लिखित दोनों नीतियां आपको यह याद रखने में मदद कर सकती हैं कि आप चीजों का पता कहाँ लगा सकते हैं यदि आप उनका लगातार अनुसरण करते हैं, लेकिन इसके लिए नीति की पसंद की तुलना में संगति अधिक महत्वपूर्ण है।
आपके विशिष्ट प्रश्न के लिए, JUnit सम्मेलन, आपके आवेदन वर्गों ( Foo1.java
, Foo2.java
) और JUnit परीक्षा कक्षाओं ( Foo1Test.java
, Foo2Test.java
) के बीच 1: 1 पत्राचार है ।
उस ने कहा, मैं काइलियन की किसी भी संगठनात्मक योजनाओं पर भावना / लक्ष्यों के महत्व पर प्रकाश डालने के लिए तहे दिल से सहमत हूं, जिसका उपयोग किसी भी संगठनात्मक योजनाओं पर किया जा सकता है। कुछ अधिवेशनों को चुनें और अधिकांश समय उनके साथ रहें, जब वे वारंट कर रहे हों, तब अपने सम्मेलनों के अपवादों की अनुमति दें।
क्या प्रत्येक विधि के लिए एक अलग वर्ग होना बेहतर है, या हर वास्तविक वर्ग के लिए सिर्फ एक परीक्षा कक्षा है?
यदि आपको एक कक्षा के तरीकों के लिए अलग-अलग परीक्षण कक्षाएं लिखने की आवश्यकता है, तो आपके पास गलत डिज़ाइन है। तरीके छोटे, पढ़ने में आसान, परीक्षण में आसान और बदलने में आसान होने चाहिए। टेस्टडेटा, मॉकिंग आदि बनाने के कारण परीक्षण मूल कोड से थोड़ा अधिक लंबा हो सकता है, लेकिन अधिक लंबा नहीं होना चाहिए। यदि वे हैं, तो परीक्षण के तहत आपकी कक्षा बहुत जटिल है और एक से अधिक चीजों ( एकल जिम्मेदारी सिद्धांत ) के लिए सुनिश्चित करती है : अपने डिजाइन पर काम करें।
मुझे लगता है कि दोनों "एक टेस्ट क्लास प्रति विधि" और "एक टेस्ट क्लास प्रति क्लास" आमतौर पर बहुत चरम पर हैं।
सामान्य तौर पर, आप प्रति परीक्षण विधि / यूनिट टेस्ट के लिए एक जांच करना चाहते हैं। उदाहरण के लिए, इन कि एक जांच करने के लिए कई दावे हो सकता है list.isEmpty = true
और list.Length = 0
, इसलिए एक परीक्षा पद्धति / व्यवहार प्रति यूनिट परीक्षण।
यह एक परीक्षण विधि नाम के साथ आना आसान बनाता है जो व्यवहार का वर्णन करता है। आप एक परीक्षण वर्ग में परीक्षण विधियों को समूह बनाना चाहते हैं, इसलिए जब आप पढ़ते हैं, तो test classname.test method
यह समझ में आता है। आमतौर पर, उन लोगों के पास कुछ साझा सेटअप कोड होते हैं जो कि परीक्षण सेटअप / स्थिरता में रखना आसान होता है। परीक्षण के तहत कक्षा के आधार पर, यह पूरी कक्षा के लिए एक परीक्षण कक्षा हो सकती है, और यह एक विधि के लिए एक परीक्षण कक्षा भी हो सकती है। लेकिन आमतौर पर, यह बीच में कहीं होगा।
सामान्य कोड की तरह, आप परीक्षणों को यथासंभव पढ़ना चाहते हैं। मेरे लिए क्या मदद करता है बीडीडी दिए गए-जब-तब या परीक्षा कोड को व्यवस्थित करने की व्यवस्था-एक्ट-मुखर शैली। एक टेस्ट क्लास जो दिया जा सकता था, वह सेटअप है। फिर, उस कक्षा में प्रत्येक परीक्षण विधि उस दिए गए (या उसके भाग) का उपयोग करती है और उसके पास एक और तब एक होता है।
परीक्षण के तहत कक्षा की कार्यक्षमता का उपयोग करने के बारे में प्रलेखन के रूप में इकाई परीक्षणों के बारे में भी सोचें। अच्छी इकाई परीक्षणों के साथ, आप यह पता लगाने के लिए परीक्षण पढ़ सकते हैं कि आप जिस कक्षा का उपयोग करना चाहते हैं, उसकी कार्यक्षमता का उपयोग कैसे किया जाए, और इसके प्रभाव क्या होंगे।
जब कुछ टूटता है और एक इकाई परीक्षण विफल हो जाता है, तो आप चाहते हैं कि यह समझना जितना संभव हो उतना आसान हो, जो टूट गया, प्रति परीक्षण एक जोर यहां बहुत मदद करता है। जब एक परीक्षण में कई दावे होते हैं, तो केवल पहला ही विफल होता है और फिर विधि बाहर निकल जाती है, इसलिए आपको पता नहीं है कि निम्नलिखित परीक्षणों में परीक्षण किया गया अन्य व्यवहार भी टूट गया है जब तक कि आप उस चीज़ को ठीक नहीं करते हैं जिसने पहले दावे को विफल कर दिया। एक दावे के साथ, आपके सभी अन्य परीक्षण तरीकों को अभी भी निष्पादित किया जाता है और यह असफलता की गहराई को समझने के लिए बहुत तेज़ है।
बेशक, मैं किलियन फोथ से सहमत हूं: व्यवहार में, आप भाग्यशाली हो सकते हैं कि आप जिस कोड पर काम कर रहे हैं, उसके लिए कुछ यूनिट परीक्षण हो सकते हैं। और कोई भी छोटा स्थानीय परीक्षण बिना किसी परीक्षण के बेहतर है, या केवल बड़े एकीकरण परीक्षण जो बिल्ड सर्वर पर चलते हैं, उन्हें बहुत समय लगता है और आमतौर पर बहुत स्थानीयकृत नहीं होते हैं (वे आपको तेजी से नहीं बताते हैं कि त्रुटि कहां है - आप 'इस पर थोड़ा काम करना होगा)।
मुझे लगता है कि यह सही है कि प्रत्येक कक्षा का अपना परीक्षण वर्ग है। विचार एकल वर्ग में लक्ष्य वर्ग से संबंधित सभी इकाई परीक्षणों को केंद्रीकृत करना है। फिर, उदाहरण के लिए, MyClass.java
इसके परीक्षण वर्ग को बुलाया जाएगा MyClassTest.java
।