यूनिट टेस्ट, NUnit या विजुअल स्टूडियो?


114

मैं अपने यूनिट टेस्ट को चलाने के लिए विज़ुअल स्टूडियो (कभी-कभी रिचार्ज करने वाला) का उपयोग कर रहा हूं।

मैंने NUnit के बारे में सुना है, लेकिन मैं इसके बारे में बहुत सी बातें नहीं जानता ...

क्या मुझे इसकी परवाह करनी चाहिए? क्या यह दृश्य स्टूडियो की तुलना में कुछ बेहतर पेश कर सकता है?

क्या मुझे NUnit का उपयोग करना चाहिए और क्यों?


12
xunit पर भी विचार करें, हालाँकि आपके पास जो कुछ भी दिख रहा है वह TestDriven.net
Ian Ringrose


xunit.net आज़माएं। यह .net ऐप के लिए ओपन सोर्स और अच्छा यूनिट टेस्टिंग फ्रेमवर्क है।
मुकेश अरोड़ा

जवाबों:


100

MS-Test पर NUnit के कुछ फायदे हैं

  1. सुइट विशेषता - परीक्षणों को अलग कर सकते हैं और उन्हें अलग-अलग निष्पादित कर सकते हैं (उदाहरण के लिए बड़ी परियोजनाओं के लिए तेज़ और धीमी परीक्षणों के लिए उपयोगी)
  2. पठनीय Assert विधि, उदा। Assert.AreEqual(expected, actual)बनामAssert.That(actual, Is.EqualTo(expected))
  3. NUnit में लगातार संस्करण अद्यतन होते हैं - MS-Test में प्रति VS संस्करण केवल एक ही होता है।
  4. Resharper और TestDriven.NET सहित कई एकीकृत धावक
  5. अपेक्षित अपवाद संदेश का दावा - NUnit में विशेषता का उपयोग करके किया जा सकता है लेकिन MS-Test में Try-Catch का उपयोग करके किया जाना चाहिए
  6. [TestCase]! NUnit पैरामीटर-ized परीक्षणों के लिए अनुमति देता है।

32
MS-Test में विशेषता द्वारा अपवाद का भी मूल्यांकन किया जा सकता है: ExpectedExceptionAttribute।
स्टीफन स्टाइनगर

9
मैं NUnit का उपयोग Assert.Throws <> () के साथ करूंगा क्योंकि यह AAA-Principle का अनुसरण करता है, जो कि विशेषता तरीके के लिए नहीं है।
ओलिवर हनप्पी

25
# 3 एक सुविधा नहीं है, यह एक समस्या है और # 5 100% गलत है; MS Test में ExpectedException विशेषता होती है, और हमेशा होती है
Randolpho

4
@ एलीशा जैसा कि मुझे याद है, उन्होंने जानबूझकर मैसेज टेक्स्ट चेकिंग का समर्थन नहीं किया क्योंकि टेक्स्ट को महत्वपूर्ण नहीं देखा जा सकता है और यह मनमाना हो सकता है। यही है, यह एक कार्यक्रम के प्रवाह को प्रभावित नहीं करता है।
रोब केंट

7
"# 3 एक विशेषता नहीं है, यह एक समस्या है" - सोचने का बहुत फुर्तीला तरीका नहीं लगता है ...
शमूएलकविस

72

मेरे वर्तमान दृष्टिकोण से (औसतन लगभग 10 डेवलपर्स के साथ 8 महीने के विकास के बाद) मैं निम्नलिखित कारणों से एमएसटीईटी का उपयोग करने के खिलाफ सलाह दूंगा

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

दूसरे शब्दों में, अगर मुझे 8 महीने पहले फिर से फैसला करना होता, तो मैं शायद NUnit लेता। मेरे पास एकीकृत परीक्षण परिणाम रिपोर्ट नहीं हो सकती है, लेकिन डेवलपर्स के पास अधिक सहज परीक्षण अनुभव होगा।


6
+1, MSTest से बचें जब तक आपके पास कोई विकल्प नहीं है। विभिन्न ओपन-सोर्स फ्रेमवर्क बेहतर हैं (xUnit, NUnit, MbUnit, आदि)।
ब्रांचनोन

49

यहां एमएस टेस्ट के साथ मेरा अनुभव है

  • हम लगभग 3800 टेस्ट के साथ एमएस टेस्ट चला रहे हैं।
  • परीक्षणों को शुरू करने के लिए बहुत लंबा समय लगता है, जो एकल परीक्षण चलाते समय दर्दनाक होता है।
  • परीक्षणों को अंजाम देने में लगभग 1GB मेमोरी लगती है। नहीं, यह हमारे परीक्षणों में मेमोरी लीक के कारण नहीं है। अक्सर हम OutOfMemoryException में चलते हैं।
  • क्योंकि यह उस अधिक संसाधन का उपयोग करता है, हम बैच-फाइलों से परीक्षण निष्पादित करना शुरू कर रहे हैं। तो क्या पूरे एकीकरण के लिए अच्छा है?
  • यह छोटी गाड़ी है और अस्थिर है:
    • उदाहरण के लिए, यदि आप [इग्नोर] को एक परीक्षण से हटाते हैं, तो वह इसे पहचान नहीं पाता है, क्योंकि यह कहीं न कहीं परीक्षणों की जानकारी देता है। आपको गवाही को ताज़ा करने की आवश्यकता है, जो कभी-कभी समस्या को हल करती है, या वी.एस. को पुनरारंभ करती है।
    • यह बेतरतीब ढंग से टॉयलेट डायरेक्टरी के संदर्भ असेंबली को कॉपी नहीं करता है।
    • परिनियोजन आइटम (उपयोग की जाने वाली अतिरिक्त फ़ाइलें) बस ठीक से काम नहीं करती हैं। उन्हें बेतरतीब ढंग से नजरअंदाज किया जाता है।
  • Vsmdi और testrunconfig फ़ाइलों में छिपी हुई (परीक्षण कोड में दिखाई नहीं देने वाली) जानकारी है। यदि आप इसके बारे में परवाह नहीं करते हैं, तो यह काम नहीं कर सकता है।
  • कार्यात्मक रूप से यह NUnit के लिए तुलनीय हो सकता है, लेकिन यदि आप VS परीक्षक संस्करण का उपयोग करने पर विचार करते हैं तो यह बहुत महंगा है।

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


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

निष्कर्ष : कम से कम रेसार्पर के साथ संयोजन में, एमएस टेस्ट उपयोगी है। और मुझे आशा है कि वे अंततः पता लगाते हैं कि टेस्ट रनर को कैसे लिखा जाना चाहिए और जब हम अगली बार विज़ुअल स्टूडियो को अपडेट करते हैं तो इस तरह के ब्रेकिंग परिवर्तन नहीं करेंगे।


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

अच्छा उत्तर, मेरा समय बच गया
FindOutIslamNow

18

दृश्य स्टूडियो के संयोजन में NUnit का उपयोग किया जा सकता है । यह एक फ्रेमवर्क है जो एक अलग कार्यक्रम नहीं है। तो आप देख सकते हैं कि यह आपको सूट करता है :)।

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

"प्लगइन स्थापित करने के बाद आपको टूल मेनू के तहत एक नया सबमेनू मिलेगा।"

इसे आयात करने के बारे में अधिक जानकारी के लिए http://nunitit.codeplex.com/ देखें ।

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



3

NUnit VS के मानक संस्करण के साथ काम करता है।


1
विज़ुअल स्टूडियो एक्सप्रेस संस्करणों को न भूलें।
चोबो 2

इकाई परीक्षण विधानसभा परियोजना पर पोस्ट-निर्माण कदम - \ पथ \ \ Nunit $ (TargetFileName) के लिए
स्टीव Gilham

1

मुझे दूसरों पर यकीन नहीं है लेकिन NUnit आपके यूनिट टेस्ट को चलाने के लिए अच्छा GUI और कंसोल प्रदान करता है और साथ ही आप NUnit टेस्ट के निष्पादन के परिणाम की रिपोर्ट भी तैयार कर सकते हैं जो इस बात का विवरण देगा कि टेस्ट फेल हो गया है या पास हो गया है और यह भी कि उसने क्या किया है अपने यूनिट टेस्ट के लिए ले जाएं


1

NUnit एक यूनिट टेस्टिंग फ्रेमवर्क है, जिसे रिसर्पर भी सपोर्ट करता है। मुझे लगता है कि आप Microsoft की इकाई परीक्षण रूपरेखा का उपयोग कर रहे हैं, इसलिए NUnit Microsoft के उत्पाद का एक विकल्प है;)

यहाँ NUnit: http://nunit.org के होमपेज का लिंक दिया गया है


तो आपका मतलब है कि nunit Microsoft इकाई परीक्षण ढांचे के अलावा और कुछ नहीं लाता है?
टिम

यह मेरी पोस्ट में (उदाहरण के लिए) मेरा लिंक देखता है।
bastijn

मैं NUnit का उपयोग कर रहा हूं और वास्तव में Microsoft की इकाई परीक्षण रूपरेखा के बारे में नहीं जानता, इसलिए मैं यह नहीं कह सकता कि क्या बेहतर है। मुझे लगता है कि एक अच्छा मौका है कि आप एसओ के अंतर पर कुछ विषय पाएंगे।
ओलिवर हनप्पी

यह अलग-अलग आर्गों के साथ एक परीक्षण विधि चलाने के लिए [TestCase] ​​जैसे कुछ उपयोगी निर्माण प्रदान करता है, - अधिक विस्तृत विनिर्देशों और अन्य के निर्माण के लिए। यह मुखरता के लिए बहुत अच्छा धाराप्रवाह वाक्य रचना का भी समर्थन करता है। और, अंतिम लेकिन कम से कम नहीं, इसका उपयोग MSTest की तुलना में बहुत अधिक व्यापक रूप से किया जाता है, इसलिए यदि आपको परेशानी होगी तो आपको समर्थन / जानकारी प्राप्त करने का बेहतर मौका होगा।
big_george

0

में NUnit , परीक्षण समानांतर में निष्पादित नहीं कर रहे हैं। बल्कि, ऐसा प्रतीत होता है कि सभी परीक्षण एक ही धागे पर चलते हैं। MSTest में, प्रत्येक परीक्षण को एक अलग थ्रेड पर त्वरित किया जाता है, इसके परिणामस्वरूप रन को इंटरलेय किया जाता है। इसलिए, यदि परीक्षण A अपनी सफलता के लिए परीक्षण B पर निर्भर करता है, तो यह संभावना विफल हो जाएगी क्योंकि परीक्षण A संभवतः दौड़ना शुरू कर देगा क्योंकि परीक्षण A चल रहा है।


-12

यदि आप Visual Studio का उपयोग कर रहे हैं, तो आपको इकाई परीक्षण करने के लिए NUnit का उपयोग करना होगा, और यदि आप java (Netbeans) चला रहे हैं, तो आपको इकाई परीक्षण के लिए JUnit का उपयोग करना होगा।

यहाँ एक साधारण कैलकुलेटर यूनिट टेस्ट के लिए एक उदाहरण दिया गया है

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleCalculator;
using NUnit.Framework;

namespace CalculatorTest
{
    [TestFixture]
    public class Class1
    {
        public Calculator _calculator;
        [TestFixtureSetUp]
        public void Initialize()
        {
            _calculator = new Calculator();
        }
        [Test]
        public void DivideTest()
        {
            int a = 10;
            int b = 2;
            int expectedValue = a / b;
            int actualvalue = _calculator.Divide(a, b);
            Assert.AreEqual(expectedValue, actualvalue,"Failure");

        }
    }
}

4
बेशक आपको NUnit का उपयोग करने की आवश्यकता नहीं है, यह सिर्फ एक रूपरेखा है, कोई भी आपको इसका उपयोग करने के लिए मजबूर नहीं करता है। अगर आप ऊब गए हैं तो आप अपना एक भी लिख सकते हैं।
हिमब्रोबेरे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.