2009-07-12 12 views
8

क्या आप अपने यूनिट परीक्षण परियोजनाओं को अपने .net समाधानों के भीतर सेट अप करने के तरीके को साझा कर सकते हैं?आप अपने यूनिट टेस्ट प्रोजेक्ट को नेट में कैसे सेट अप करते हैं?

मैं कई संभावित पद्धतियों की कल्पना कर सकता हूं। उदाहरण के लिए:

  1. यूनिट परीक्षणों के लिए एक अलग समाधान होने के कारण, मूल कोड समाधान की संरचना को पूरी तरह मिररिंग किया जा रहा है।

  2. मूल कोड समाधान के अंदर, एक समाधान फ़ोल्डर है जिसमें आप पूरी तरह से कर रहे हैं ... मिरर

  3. प्रत्येक कोड परियोजना के लिए एक इकाई परीक्षण परियोजना है और समाधान के वृक्ष संरचना के अंदर यह बगल में रहने वाले है।

  4. एक इकाई परीक्षण परियोजना है जिसमें वृक्ष संरचना में उनके साथ रहने वाली कई कोड परियोजनाएं शामिल हैं।

यह सुनना अच्छा लगेगा कि आप वास्तव में अपने समाधान में यह कैसे कर रहे हैं।

उत्तर

10

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

कुछ अलग तरीके हैं जो आप कर सकते हैं।

  • एक एकल परीक्षण परियोजना प्रति एकल समाधान (Product.UnitTests।csproj)
  • प्रणाली के अनुसार एक एकल परीक्षण परियोजना (Product.SystemName.UnitTests.csproj)
  • उत्पादन परियोजनाओं और परीक्षण परियोजनाओं में से एक मानचित्रण के लिए एक एक (Product.ProjectName.csproj और Product.ProjectName.Tests.csproj)

प्रत्येक के पास अपने स्वयं के व्यापार-बंद होते हैं जिन्हें आप वजन करना चाहते हैं। एकमात्र समाधान प्रति

एकल परीक्षण परियोजना

तभी सार्थक होता है पूरे समाधान एकजुट परियोजनाओं में शामिल है। यदि आप हमेशा एक ही समाधान का उपयोग करके विकासशील होने जा रहे हैं, तो केंद्रीकृत परीक्षण परियोजना होना अच्छा लगता है।

इसका मतलब है कि आपकी बिल्ड प्रक्रिया पर कम ओवरहेड है (जब आपके पास कई परियोजनाओं के साथ समाधान होते हैं, असेंबली गिनती को कम करने से बिल्डिंग समय भी कम हो जाता है) और एननिट फाइलों या जैसे ही बनाए रखने का कोई ओवरहेड नहीं है।

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

मूल रूप से ऊपर के रूप में ही प्रति

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

एक एक उत्पादन परियोजनाओं और परीक्षण परियोजनाओं

है नई विधानसभाओं बनाने के मामले में सबसे भूमि के ऊपर से एक मानचित्रण करने के लिए, निर्माण के समय एक सा है जब वहाँ परियोजनाओं का भार है और आम तौर पर अपने समाधान फ़ाइल बड़ा बनाता है बढ़ जाती है । हमेशा रखने के मामले में परिश्रम की आवश्यकता होती है। परियोजनाओं को अद्यतित करने के लिए परियोजनाएं और इन-आईडीई इकाई परीक्षण के साथ बहुत अच्छी तरह से नहीं खेलती हैं।

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

सारांश में: मुझे लगता है कि उपर्युक्त में से कोई भी आपके विकास के आधार पर अच्छी तरह से काम कर सकता है, लेकिन यदि आप एक समाधान चाहते हैं जो 'बस काम करता है', तो मैं एक से एक मैपिंग के लिए जाने के इच्छुक हूं ।

1

निम्नलिखित संरचना ने मेरे लिए अच्छा काम किया है। यह उत्पादन और परीक्षण कोड को अलग रखता है।

\source 
\source\code\MainSolution.sln 
\source\code\Project1 
\source\code\... 
\source\test\TestSolution.sln 
\source\test\TestProject1 
\source\test\... 
0

दोनों के लिए एक ही समाधान है, लेकिन 2 परियोजनाओं, नेट परियोजना और NUnit परियोजना (एक करने के लिए एक), अब अगर मैं एक समाधान कई परियोजनाओं है कि है, तो मैं सिर्फ 1 NUnit परियोजना है है समाधान के लिए और प्रत्येक परियोजना के लिए 1 .. मुझे लगता है कि यह एक अच्छा तरीका है क्योंकि यह मेरी परियोजनाओं को व्यवस्थित करने के लिए काम करता है।

इसके अलावा, आप इस पुस्तक को देख सकते हैं: http://www.artofunittesting.com/ यह बहुत अच्छा है।

10

निश्चित रूप से एकमात्र समाधान है, लेकिन अलग परियोजनाओं:

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

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

0

मैं फ़ोल्डर्स

जोड़कर मेरे स्रोत कोड और I समूह परीक्षण के समान समाधान में एक परीक्षण प्रोजेक्ट करना पसंद करता हूं
संबंधित मुद्दे