c# यूनिट परीक्षण के लिए एनयूनीट बनाम विजुअल स्टूडियो 2008 की टेस्ट प्रोजेक्ट्स?




asp.net-mvc visual-studio-2008 (16)

मैं काम पर एक नई परियोजना शुरू करने जा रहा हूं और यूनिट परीक्षण में शामिल होना चाहता हूं। हम वीएस 2008, सी #, और एएसपी.नेट एमवीसी सामान का उपयोग करेंगे। मैं या तो एनयूनीट या निर्मित परीक्षण परियोजनाओं का उपयोग कर रहा हूं जो वीएस -2008 है, लेकिन मैं अन्य सुझावों का शोध करने के लिए खुला हूं। क्या एक प्रणाली दूसरे की तुलना में बेहतर या समझने में आसान है? मैं इस परियोजना को आगे बढ़ाने के हमारे विकास प्रयासों के लिए "सर्वोत्तम अभ्यास" के रूप में स्थापित करने के लिए देख रहा हूं।

किसी भी मदद और सुझाव के लिए धन्यवाद !!


मैंने एमएसटीएस्ट के साथ शुरुआत की लेकिन एक साधारण कारण के लिए स्विच किया। एमएसटीएस्ट अन्य असेंबली से टेस्ट तरीके की विरासत का समर्थन नहीं करता है।

मुझे एक ही परीक्षा को कई बार लिखने के विचार से नफरत है। विशेष रूप से एक बड़ी परियोजना पर जहां परीक्षण विधियां आसानी से 100 के परीक्षणों में चल सकती हैं।

NUnit मुझे वही करता है जो मुझे चाहिए। एनयूनीट के साथ गायब होने वाली एकमात्र चीज एक विजुअल स्टूडियो एडिन है जो प्रत्येक परीक्षण के लाल / हरे रंग की स्थिति (वीएसटीएस की तरह) प्रदर्शित कर सकती है।


ग्रीनफील्ड परियोजना के लिए XUnit एक और संभावना है। यह शायद एक अधिक सहज ज्ञान युक्त वाक्यविन्यास है, लेकिन यह अन्य ढांचे के साथ वास्तव में संगत नहीं है।

http://www.codeplex.com/xunit


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


जहां तक ​​मुझे पता है, इन दिनों .NET के साथ यूनिट परीक्षण के लिए चार फ्रेमवर्क उपलब्ध हैं

  • NUnit
  • MbUnit
  • MSTest
  • XUnit

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

यदि आप यूनिट परीक्षण के साथ बस शुरुआत कर रहे हैं तो यह शायद बहुत अंतर नहीं करता है। एक बार जब आप तेजी से बढ़ जाएंगे तो आप यह तय करने के लिए बेहतर स्थिति में होंगे कि आपकी आवश्यकताओं के लिए कौन सा ढांचा सर्वोत्तम है।



मुझे संदेश मिला कि "NUnit फ़ाइल संरचना VSTest से अधिक समृद्ध है" ... बेशक यदि आप NUnit फ़ाइल संरचना को प्राथमिकता देते हैं, तो आप इस समाधान का उपयोग अन्य तरीकों से कर सकते हैं, जैसे (NUnit-> VS):

 #if !MSTEST
  using NUnit.Framework;
 #else
  using Microsoft.VisualStudio.TestTools.UnitTesting;
  using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;
  using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;
  using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute;
  using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute;
 #endif

या कोई अन्य रूपांतरण ... :-) यह यहां उपयोग करने वाला कंपाइलर के लिए उपनाम है।


विजुअल स्टूडियो के परीक्षण ढांचे की एक मामूली परेशानी यह है कि यह कई परीक्षण चलाने वाली फाइलें बनाएगी जो आपकी प्रोजेक्ट निर्देशिका को अव्यवस्थित करते हैं - हालांकि यह एक सौदा का बड़ा नहीं है।

साथ ही, यदि आपके पास TestDriven.NET जैसे प्लगइन की कमी है, तो आप Visual Studio वातावरण के भीतर अपने NUnit (या MbUnit, xUnit, आदि) यूनिट परीक्षणों को डीबग नहीं कर सकते हैं, जैसा कि आप माइक्रोसॉफ्ट वीएस परीक्षण ढांचे के साथ बना सकते हैं।


थोड़ा ऑफ-विषय, लेकिन यदि आप न्यूटिट के साथ जाते हैं तो मैं ReSharper का उपयोग करने की सिफारिश कर सकता हूं - यह वीएस यूआई में कुछ बटन जोड़ता है जो आईडीई के भीतर से परीक्षण चलाने और डीबग करने में बहुत आसान बनाता है।

यह समीक्षा थोड़ी पुरानी है, लेकिन इसे अधिक विस्तार से बताती है:

http://codebetter.com/blogs/paul.laudeman/archive/2006/08/15/Using-ReSharper-as-an-essential-part-of-your-TDD-toolkit.aspx


मैं एमएस के छोटे परीक्षण ढांचे का उपयोग करना पसंद करूंगा, लेकिन अब के लिए एनयूनीट के साथ चिपक रहा हूं। एमएस के साथ समस्याएं आमतौर पर (मेरे लिए) होती हैं

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

चेतावनी - अगर मैं एएसपीएक्स साइट का परीक्षण कर रहा था, तो मैं निश्चित रूप से एमएस का उपयोग करता हूं - अगर मैं अकेले विकास कर रहा था, तो एमएस भी ठीक होगा - अगर मेरे पास सीमित कौशल था और एनयूनीट को कॉन्फ़िगर नहीं कर सका :)

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


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

यह भी देखें:


यूनिट-परीक्षण ढांचा वास्तव में बहुत मायने रखता नहीं है, क्योंकि आप अलग-अलग प्रोजेक्ट फ़ाइलों और सशर्त संकलन (जैसे, वीएस-> एनयूनीट) के साथ परीक्षण कक्षाओं को परिवर्तित कर सकते हैं:

 #if !NUNIT
  using Microsoft.VisualStudio.TestTools.UnitTesting;
 #else
  using NUnit.Framework;
  using TestClass = NUnit.Framework.TestFixtureAttribute;
  using TestMethod = NUnit.Framework.TestAttribute;
  using TestInitialize = NUnit.Framework.SetUpAttribute;
  using TestCleanup = NUnit.Framework.TearDownAttribute;
  using TestContext = System.String;
  using DeploymentItem = NUnit.Framework.DescriptionAttribute;
 #endif

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


यदि आप या तो एमएसटीएस्ट या एनआईएनआईटी पर विचार कर रहे हैं, तो मैं आपको एमबीयूनीट देखने की सलाह देता हूं। मेरे कारण हैं

  1. TestDriven.Net संगतता। कुछ भी धड़कता नहीं है TestDriven.Net.ReRunWithDebugger एक कीबोर्ड संयोजन से बंधे हैं।
  2. गैलियो ढांचा। Gallio nnnits की तरह एक परीक्षण धावक है। केवल अंतर यह है कि यदि आप nnnit, msTest, xUnit या mbUnit में अपने परीक्षण लिखे हैं तो यह परवाह नहीं करता है। वे सब दौड़ते हैं।
  3. Nnnit के साथ संगतता। Nnnit में सभी सुविधाएं mbUnit द्वारा समर्थित हैं। मुझे लगता है कि आपको अपने गुणों को बदलने की भी आवश्यकता नहीं है (इसे जांचना होगा), बस आपका संदर्भ और उपयोग।
  4. संग्रह asserts। mbUnit में संग्रह एएसएसर्ट क्लास समेत अधिक जोरदार मामले हैं। असल में आपको यह देखने के लिए अपने स्वयं के परीक्षण लिखने की आवश्यकता नहीं है कि 2 संग्रह समान हैं या नहीं।
  5. कॉम्बिनेटोरियल परीक्षण। यदि आप डेटा के दो सेट की आपूर्ति कर सकते हैं और डेटा के सभी संयोजनों के लिए परीक्षण प्राप्त कर सकते हैं तो यह अच्छा नहीं होगा। यह mbUnit में है।

मैंने मूल रूप से अपनी [रोटेस्ट ....] कार्यक्षमता के mbUnit becasue को उठाया, और मुझे वापस जाने का एक कारण नहीं मिला है। मैंने अपने सभी सक्रिय परीक्षण सूट को एनयूनीट से ऊपर ले जाया, और कभी पीछे नहीं देखा। तब से मैंने लाभ के लिए दो अलग-अलग विकास टीमों को परिवर्तित कर दिया है।


मैंने दोनों का उपयोग करके कुछ टीडीडी किया है और (शायद मैं थोड़ा गूंगा हूं) nnnit मेरे लिए उपयोग करने के लिए बहुत तेज़ और सरल लगता है। और जब मैं बहुत कुछ कहता हूं, मेरा मतलब बहुत है।

एमएस टेस्ट में, हर जगह बहुत सारे गुण हैं - वास्तविक परीक्षण करने वाला कोड वह छोटी रेखा है जो आप यहां और वहां पढ़ सकते हैं। बड़ी गड़बड़ी। एनयूनीट में, परीक्षण करने वाला कोड केवल गुणों पर हावी है, जैसा कि करना चाहिए।

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

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

लेकिन मैं गलत हो सकता हूं, ज़ाहिर है - मैंने सिर्फ 21 ब्लॉग पोस्ट पढ़े हैं "वीएसटीएस का उपयोग करके सरल टीडीडी कैसे करें"। मुझे और पढ़ना चाहिए था, आप सही हैं।

Nnnit के लिए, मैंने एक पढ़ा। और मैं उसी दिन टीडीडी कर रहा था। मज़ा के साथ

वैसे, मैं आमतौर पर माइक्रोसॉफ्ट उत्पादों से प्यार करता हूँ। विजुअल स्टूडियो वास्तव में डेवलपर खरीद सकता है सबसे अच्छा उपकरण है - लेकिन विजुअल स्टूडियो टीम सिस्टम में टीडीडी और वर्क आइटम प्रबंधन वास्तव में बेकार है।

शुभकामनाएं। सिल्वेन।


सबसे पहले मैं गलत कथन को सही करना चाहता हूं: आप कमांड लाइन का उपयोग कर विजुअल स्टूडियो के बाहर msTest चला सकते हैं। हालांकि टीम सीटी जैसे कई सीआई टूल्स में एनयूनीट के लिए बेहतर समर्थन है (संभवतः एमएसटेस्ट अधिक लोकप्रिय हो जाएगा)। मेरी वर्तमान परियोजना में हम दोनों का उपयोग करते हैं और हमने पाया कि एकमात्र बड़ा अंतर यह है कि एमस्टेट हमेशा 32 बिट के रूप में चलता है जबकि एनयूनीट 32 बिट या 64 बिट टेस्ट के रूप में चलता है जो केवल तभी मायने रखता है जब आपका कोड मूल कोड का उपयोग करता है जो कि 32/64 निर्भर है।


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

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


एनयूनीट पर वीएस यूनिट परीक्षण के साथ मेरा मुख्य गोमांस वीएस परीक्षण निर्माण निजी सदस्य पहुंच के लिए जेनरेट कोड का एक गुच्छा इंजेक्ट करता है।

कुछ लोग अपनी निजी विधियों का परीक्षण करना चाहते हैं, कुछ शायद नहीं, यह एक अलग विषय है।

मेरी चिंता यह है कि जब मैं यूनिट परीक्षण लिख रहा हूं तो उन्हें बेहद नियंत्रित किया जाना चाहिए, इसलिए मुझे पता है कि मैं वास्तव में क्या परीक्षण कर रहा हूं और वास्तव में मैं इसका परीक्षण कैसे कर रहा हूं। यदि ऑटो जेनरेट कोड है तो मैं उस स्वामित्व में से कुछ खो रहा हूं।





nunit