2010-03-05 13 views
98

मैं (के तहत क्लिक शिल्पकार तक विषय) Craftsman articles पढ़ने के माध्यम से टेस्ट संचालित विकास की अवधारणाओं सीख रहा हूँ मेरे पिछले सवाल, "Sample project for learning JUnit and proper software engineering" के जवाब में की सिफारिश की। मुझे अभी तक इससे प्यार है!विशेष परीक्षण पैकेज में जुनीट कक्षाओं का पृथक्करण?

लेकिन अब मैं बैठना चाहता हूं और इसे स्वयं कोशिश करना चाहता हूं। मेरे पास एक सवाल है कि मुझे उम्मीद है कि केवल एक साधारण जवाब की आवश्यकता होगी।

आप अपने जुनीट परीक्षण कक्षाओं और अपने वास्तविक कोड को कैसे व्यवस्थित करते हैं? मैं मुख्य रूप से पैकेज संरचना के बारे में बात कर रहा हूं, लेकिन नोट की किसी अन्य अवधारणा भी सहायक होगी।

क्या आप org.myname.project.test में परीक्षण कक्षाएं डालते हैं। * और org.myname.project में सामान्य कोड। *? क्या आप सामान्य कक्षाओं के साथ टेस्ट कक्षाओं को सही रखते हैं? क्या आप कक्षा के नामों को प्रत्यय के बजाय परीक्षण के साथ उपसर्ग करना पसंद करते हैं?

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

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


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

+1

संभावित डुप्लिकेट [मुझे अपने जुनीट परीक्षण कहां रखना चाहिए?] (Http://stackoverflow.com/questions/811827/where-should-i-put-my-junit-tests) – Mark

उत्तर

135

मैं परियोजना कक्षाएं वे परीक्षण के रूप में ही पैकेज में परीक्षण वर्गों डाल पसंद करते हैं, लेकिन एक अलग शारीरिक निर्देशिका में, जैसे:

myproject/src/com/foo/Bar.java 
myproject/test/com/foo/BarTest.java 

एक Maven परियोजना में इसे इस तरह दिखेगा:

myproject/src/main/java/com/foo/Bar.java 
myproject/src/test/java/com/foo/BarTest.java 

इसका मुख्य बिंदु यह है कि मेरे टेस्ट क्लास पैकेज-स्कोप कक्षाओं और सदस्यों तक पहुंच सकते हैं (और परीक्षण!)।

जैसा कि उपर्युक्त उदाहरण दिखाता है, मेरे परीक्षण वर्गों में परीक्षण कक्षा का नाम Test प्रत्यय के रूप में है।इससे उन्हें जल्दी से खोजने में मदद करता है - यह, जिसका नाम से प्रत्येक Test के साथ शुरू होता सौ परीक्षण कक्षाओं के एक जोड़े के बीच में खोजने का प्रयास करने के लिए बहुत अजीब नहीं है ...

अद्यतन @ Ricket की टिप्पणी से प्रेरित: इस तरह से परीक्षण वर्गों (आमतौर पर) कक्षा के नामों की एक परियोजनावार वर्णमाला सूची में उनके परीक्षण किए गए दोस्त के ठीक बाद दिखाएं। (अजीब बात है मैं दिन-ब-दिन इस से लाभ है कि कर रहा हूँ, हो रही है होशपूर्वक पता चला कि बिना ...)

Update2: डेवलपर्स (अपने आप सहित) Maven की तरह का एक बहुत है, लेकिन वहाँ कम से कम के रूप में कई जो हो रहा है नहीं है। आईएमएचओ यह "मुख्यधारा" जावा परियोजनाओं के लिए बहुत उपयोगी है (मैं इस श्रेणी में लगभग 9 0% परियोजनाएं डालूंगा ... लेकिन अन्य 10% अभी भी एक अल्पसंख्यक अल्पसंख्यक है)। अगर कोई मेवेन सम्मेलनों को स्वीकार कर सकता है तो इसका उपयोग करना आसान है; हालांकि यदि नहीं, तो यह जीवन को एक दुखी संघर्ष बनाता है। चींटियों को एंट पर सामाजिककृत कई लोगों के लिए समझना मुश्किल लगता है, क्योंकि जाहिर है कि उन्हें सोचने का एक बहुत अलग तरीका चाहिए। (स्वयं, कभी भी चींटी का उपयोग नहीं किया जा सकता है, दोनों की तुलना नहीं कर सकता।) एक बात निश्चित रूप से है: यह इकाई (और एकीकरण) प्रक्रिया में प्राकृतिक, प्रथम श्रेणी के चरण का परीक्षण करती है, जो डेवलपर्स को इस आवश्यक अभ्यास को अपनाने में मदद करती है।

+0

इसके बजाय प्रत्यय का उपयोग करने के बारे में अच्छा बिंदु! – Martin

+5

मैं प्रत्यय नोट से भी सहमत हूं। चूंकि टेस्ट क्लास को एक अलग भौतिक फ़ोल्डर में विभाजित किया जाता है, इसलिए ग्रुपिंग में वर्णमाला क्रम क्रमबद्ध करने के कुछ प्रयासों में टेस्ट के साथ प्रयास करने और उपसर्ग करने की आवश्यकता नहीं है, और मुझे लगता है कि SomeClassTest बेहतर पढ़ता है। – Ricket

+0

उत्कृष्ट सम्मेलन +1 – whiskeysierra

9

मैं Maven का उपयोग करता हूं। संरचना कि Maven को बढ़ावा देता है: -

src/main/java/org/myname/project/MyClass.java 

src/test/java/org/myname/project/TestMyClass.java 

अर्थात टेस्ट के साथ एक परीक्षण वर्ग परीक्षण के अंतर्गत क्लास का नाम लिए prepended मुख्य परीक्षा के लिए एक समानांतर निर्देशिका संरचना में है।

उसी पैकेज में परीक्षण कक्षाएं होने की एक फायदा (हालांकि आवश्यक निर्देशिका नहीं है) क्या आप नकली परीक्षण वस्तुओं का निरीक्षण या इंजेक्ट करने के लिए पैकेज-स्कोप विधियों का लाभ उठा सकते हैं।

+14

हालांकि यह ' था Test.java', 'टेस्ट नहीं .java' –

+1

मैवेन [मेवेन सरेफायर प्लगइन प्रलेखन] के अनुसार पैटर्न को स्वीकार करेगा (http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion -exclusion.html)। –

+1

मैं तर्क दूंगा कि ' टेस्ट.जावा' नामकरण योजना आईडीई खोज सुविधाओं का उपयोग करते समय मुख्य वर्ग और टेस्ट क्लास दोनों को बंद कर देती है, जो इसे 'टेस्ट .java' से थोड़ा बेहतर बनाता है। – christopheml

14

मैंने अपनी टेस्ट कक्षाओं को उसी पैकेज में रखा है जो वे पर परीक्षण कर रहे हैं लेकिन एक अलग स्रोत फ़ोल्डर या प्रोजेक्ट में। इस फैशन में मेरा टेस्ट कोड व्यवस्थित करने से मुझे आसानी से संकलन और पैकेज को अलग-अलग पैकेज करने की अनुमति मिलती है ताकि उत्पादन जार फ़ाइलों में टेस्ट कोड न हो। यह परीक्षण कोड को निजी क्षेत्रों और विधियों तक पहुंचने की अनुमति देता है।

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