NUnit बनाम MbUnit बनाम MSTest बनाम xUnit.net [बंद]


390

.NET के लिए वहाँ बहुत सारे unittesting फ्रेमवर्क हैं। मुझे यह छोटी विशेषता तुलना में मिली: http://xunit.github.io/docs/comparisons.html

अब मुझे हमारे लिए सर्वश्रेष्ठ चुनना है। पर कैसे? फर्क पड़ता है क्या? कौन सा सबसे भविष्य का प्रमाण है और इसके पीछे एक सभ्य गति है? क्या मुझे सुविधाओं के बारे में परवाह करनी चाहिए? जबकि xUnit सबसे आधुनिक और विशेष रूप से .NET के लिए डिज़ाइन किया गया लगता है, NUnit को फिर से वही लगता है जो व्यापक रूप से स्वीकार किया जाता है। MSTest फिर से पहले से ही Visual Studio में एकीकृत है ...


11
यह तुलना तालिका वर्ष से पुरानी है। उदाहरण के लिए, Nnnit में Assert.Throws आदि भी हैं, और निबंध तालिका में सब कुछ पुराना API है। नया Assert.That (..., Is ....) धाराप्रवाह वाक्यविन्यास बहुत अच्छा है, और अब एक अच्छा समय है।
जिम कूपर

11
क्या आप किसी ऐसी तालिका के बारे में जानते हैं जो आज तक अधिक है?
बिटकॉइन

1
2013 के अंत में, xUnit.net => NUnit से स्थानांतरित किया गया। यह भी ध्यान दें कि xUnit.NET (प्रोजेक्ट)! = XUnit (श्रेणी, जिनमें से NUnit एक सदस्य है)
DeepSpace101

3
@ क्या आप xUnity.net => NUnit से क्यों चले गए?
अलेक्जेंडर लॉगर

जवाबों:


197

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैंने सोचा कि मैं xUnit.NET के लिए एक वोट पोस्ट करूंगा । हालांकि अधिकांश अन्य परीक्षण रूपरेखाओं का उल्लेख सभी बहुत समान है, xUnit.NET ने यूनिट परीक्षण के लिए एक बहुत ही अनोखा, आधुनिक और लचीला दृष्टिकोण लिया है। यह शब्दावली को बदलता है, इसलिए आप अब टेस्टफ़िक्स और टेस्ट को परिभाषित नहीं करते हैं ... आप अपने कोड के बारे में तथ्य और सिद्धांत निर्दिष्ट करते हैं, जो इस बात की अवधारणा के साथ बेहतर एकीकृत करता है कि एक परीक्षण TDD / BDD परिप्रेक्ष्य से क्या है।

xUnit.NET भी अत्यधिक विस्तृत है। इसके FactAttribute और TraitAttribute विशेषता वर्गों को सील नहीं किया गया है, और यह आपके लिए बहुत अधिक नियंत्रण प्रदान करता है कि आप उन विशेषताओं को कैसे नियंत्रित करते हैं, जिन्हें निष्पादित किया जाना चाहिए। हालांकि xUnit.NET अपने डिफ़ॉल्ट रूप में आपको परीक्षण कक्षाओं को लिखने की अनुमति देता है जो उनके परीक्षण विधियों के साथ NUnit परीक्षण जुड़नार के समान हैं, आप इकाई परीक्षण के इस रूप तक ही सीमित नहीं हैं। जैसा कि यहां दर्शाया गया है, आप BDD- स्टाइल कंसर्न / कॉन्टेक्स्ट / ऑब्जर्वेशन विनिर्देशों का समर्थन करने के लिए फ्रेमवर्क का विस्तार करने के लिए स्वतंत्र हैं

xUnit.NET अपने थ्योरी विशेषता और संबंधित डेटा विशेषताओं के साथ बॉक्स से सीधे फिट-शैली परीक्षण का भी समर्थन करता है। फिट इनपुट डेटा को एक्सेल, डेटाबेस या यहां तक ​​कि एक कस्टम डेटा स्रोत जैसे वर्ड डॉक्यूमेंट (आधार डेटा विशेषता का विस्तार करके) से लोड किया जा सकता है। यह आपको यूनिट टेस्ट और इंटीग्रेशन टेस्ट दोनों के लिए एकल परीक्षण प्लेटफॉर्म पर कैपिटल करने की अनुमति देता है। उत्पाद निर्भरता और आवश्यक प्रशिक्षण को कम करने में भारी हो सकता है।

परीक्षण के अन्य दृष्टिकोण भी xUnit.NET के साथ लागू किए जा सकते हैं ... संभावनाएं बहुत असीम हैं। मॉकिंग फ्रेमवर्क को देखते हुए एक और बहुत ही आगे के साथ संयुक्त, Moq , दोनों स्वचालित परीक्षण के लिए एक बहुत ही लचीला, एक्स्टेंसिबल और शक्तिशाली मंच बनाते हैं।


35
जबकि यह एक साल पहले सच था, NUnit ने तब से अधिकांश विशेषताओं को जोड़ा है। NUnit में आप परीक्षण दोनों तरह से लिख सकते हैं।
मार्क लेविसन

8
इसके बारे में इतना नहीं है कि कौन सी विशेषताएँ उपलब्ध हैं, लेकिन उनका उपयोग कैसे किया जा सकता है। xUnit.NET को एक अत्यधिक लचीले और एक्स्टेंसिबल फ्रेमवर्क के रूप में तैयार किया गया था, जिसने आपको परीक्षण के किसी विशेष तरीके में लॉक नहीं किया था, और आपको नवीनतम क्षमताओं को प्राप्त करने के लिए कोर फ्रेमवर्क को नियमित रूप से अपडेट करने की आवश्यकता नहीं है।
jrista

9
1. विशेषताओं पर अलग-अलग नाम एक बिंदु से ज्यादा नहीं बनेंगे। 2. NUnit एक्स्टेंसिबल था और यह एक्सटेंसिबल होना जारी है:? 3. परीक्षणों के लिए डेटा पंक्ति पैरामीटर ननिट में समर्थित हैं। कुछ समय पहले उन्हें एक एक्सटेंशन में सपोर्ट किया गया था :) 4. Moit के साथ मिलकर ननिट एक ही चीज बनाता है। 5. बीडीडी के लिए मैं कहता हूं कि यह एक प्रवाह है, जो कई यूनिट टेस्टिंग फ्रेमवर्क के साथ आसानी से एकीकृत होता है।
११:११

8
मुझे xUnit की आवाज़ पसंद है, हालाँकि इसमें ज़िल्च प्रलेखन है :(
कर्नल आतंक

10
xUnit के पास कोई दस्तावेज नहीं है! उदाहरण: यह खोजने की कोशिश करें कि Traitवास्तव में क्या करता है या यदि आप एकल माता-पिता की परीक्षा के भीतर अलग-अलग परीक्षण कर सकते हैं (जैसे सभी के testsभीतर testfixture)। xUnit परीक्षणों के सपाट दृश्य के बजाय nUnit एक महान पदानुक्रमित दृश्य बनाता है। इसके अलावा नामकरण कोई मतलब नहीं है - तथ्यों और सिद्धांत? वास्तविक बनो! जिन्हें बेहतर परीक्षण और डेटा कहा जाता है।
डीपस्पेस101101

134

NUnit शायद 3rd पार्टी टूल्स द्वारा समर्थित है। यह भी अन्य तीन की तुलना में लगभग लंबा रहा है।

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


3
आपकी शीर्ष मॉक लाइब्रेरी क्या है?
dplante

31
मुझे Moq पसंद है, RhinoMocks भी अच्छा है।
अलेक्जेंडर कोजेवनिकोव

5
यह भी Pex और Moles की जाँच करने के लिए सार्थक हो सकता है, विशेष रूप से मोल्स भाग mocking के लिए उपयोगी है।
चार्ल्स प्रकाश दसारी

4
FakeItEasy के साथ MSPec ... परीक्षण के मामलों को और अधिक पठनीय बना रहा है
Robie

5
NSubstitute और AutoFixture के साथ MSpec मेरी पसंद है।
डैनियल हिल्गारथ

108

मैं MSTest के साथ नहीं जाऊंगा। हालाँकि यह संभवत: माइक्रोसॉफ्ट के साथ चौखटों का सबसे भविष्य का प्रमाण है क्योंकि यह सबसे लचीला समाधान नहीं है। यह कुछ हैक्स के बिना अकेले नहीं चलेगा। इसलिए इसे Visual Studio स्थापित किए बिना TFS के अलावा किसी बिल्ड सर्वर पर चलाना कठिन है। विज़ुअल स्टूडियो टेस्ट-रनर वास्तव में Testdriven.Net + के किसी अन्य फ्रेमवर्क की तुलना में धीमा है। और क्योंकि इस फ्रेमवर्क की रिलीज़ विजुअल स्टूडियो की रिलीज़ से जुड़ी हुई है इसलिए कम अपडेट हैं और यदि आपको पुराने वीएस के साथ काम करना है तो आप पुराने MSTest से बंधे हैं।

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

मैं व्यक्तिगत रूप से अपने सहकर्मियों की पसंद के आधार पर XUnit.Net या NUnit का उपयोग करता हूं। NUnit सबसे मानक है। XUnit.Net सबसे दुबला ढांचा है।


36
मैं इसे इसी निष्कर्ष पर लात मार रहा हूं और चिल्ला रहा हूं। मैं वास्तव में दृश्य स्टूडियो के साथ एकीकरण के कारण MSTest का उपयोग करना चाहता था, लेकिन यह भी इसकी कमजोरी है। मुझे एक गैर-Microsoft बिल्ड सर्वर पर परीक्षण चलाने की आवश्यकता है और वहाँ कोई रास्ता नहीं है कि मैं इसे प्राप्त करने के लिए उस पर Visual Studio स्थापित कर रहा हूं। यह शर्म की बात है कि Microsoft महान उपकरण पैदा करता है और फिर उन्हें लगभग अप्राप्य बनाता है।
टिम लॉन्ग

11
+1 जो MSTest है, उस भयावहता को दूर करने के लिए। दिन के अंत में, यह कोई फर्क नहीं पड़ता कि आप किस इकाई परीक्षण ढांचे का उपयोग करते हैं, जब तक कि यह एमएसटीस्ट नहीं है
माइक मून

21

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

उदाहरण के लिए, मैं MSTest के साथ xUnit का उपयोग करता हूं। XUnit.dll असेंबली के लिए एक संदर्भ जोड़ें, और बस कुछ ऐसा करें। आश्चर्यजनक रूप से, यह सिर्फ काम करता है!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key

namespace TestSample
{
    [TestClass]
    public class XunitTestIntegrationSample
    {
        [TestMethod]
        public void TrueTest()
        {
            Assert.True(true);  // <-- this is the Xunit.Assert class
        }

        [TestMethod]
        public void FalseTest()
        {
            Assert.False(true);
        }
    }
}

यह तकनीक NUnit, MBUnit, या अन्य उत्तरों में उल्लिखित अन्य परीक्षण ढाँचों के लिए भी काम कर सकती है, लेकिन मैंने उनकी कोशिश नहीं की है।
मैट क्राउच

1
क्या आपको लगता है कि मैं इस दृष्टिकोण, मैट के साथ MSTest के साथ काम करने के लिए मानकीकृत परीक्षण प्राप्त कर सकता हूं?
देवडेव

@DevDave नं। अपने उदाहरण में उन्होंने एक अन्य विधानसभा से एक वर्ग का उपयोग किया। यदि आप पैरामीटरयुक्त परीक्षण चाहते हैं, तो आपको एक और परीक्षण ढांचे की आवश्यकता होगी जो विशेष रूप से MSTest को विस्तारित करने के लिए बनाया गया है।
जोरनहानी

3
Suprisingly, it just works!आपने बस किसी अन्य असेंबली से एक स्थिर कार्य कहा है। आप आश्चर्यचकित क्यों हैं कि यह काम करता है? इसके अलावा, अगर आपको केवल इस बात की आवश्यकता है कि विशेष रूप से उसके लिए बनाई गई विधानसभा का उपयोग क्यों न करें?
ज़ोरान404

9

Nunit C ++ में मिश्रित-मोड परियोजनाओं के साथ अच्छी तरह से काम नहीं करता है इसलिए मुझे इसे छोड़ना पड़ा


3
मुझे इस उत्तर पर गर्व नहीं है लेकिन मैंने उस परियोजना के लिए इकाई परीक्षण को गिरा दिया। त्रुटियों के क्रम का पता लगाने के लिए मैंने बहुत सारे सत्यापन प्रक्रियाओं का सहारा लिया
एरिक

2
मैं मिश्रित-मोड में NUnit का उपयोग करने की उम्मीद करता हूं, लेकिन यह अपर्याप्त भी पाया गया, अंत में मैं googletest के लिए चला गया जो कि एक उत्कृष्ट C ++ इकाई परीक्षण रूपरेखा और v को स्थापित करने के लिए सरल है।
चिलिटॉम

8

यह छोटे / व्यक्तिगत पैमाने पर बड़ी बात नहीं है, लेकिन यह बड़े पैमाने पर जल्दी से एक बड़ा सौदा बन सकता है। मेरा नियोक्ता एक बड़ी Microsoft दुकान है, लेकिन कई कारणों से टीम सिस्टम / TFS में नहीं खरीद सकता / सकती है। वर्तमान में हम Subversion + Orcas + MBUnit + TestDriven.NET का उपयोग करते हैं और यह अच्छी तरह से काम करता है, लेकिन TD.NET प्राप्त करना एक बहुत बड़ी परेशानी थी। MBUnit + TestDriven.NET की संस्करण संवेदनशीलता भी एक बड़ी परेशानी है, और एक अतिरिक्त वाणिज्यिक चीज़ (TD.NET) को संभालने और प्रबंधित करने के लिए कानूनी समीक्षा और खरीद के लिए, तुच्छ नहीं है। मेरी कंपनी, बहुत सी कंपनियों की तरह, एक MSDN सदस्यता मॉडल के साथ मोटी और खुश हैं, और यह सिर्फ सैकड़ों डेवलपर्स के लिए एक खरीद को संभालने के लिए उपयोग नहीं किया जाता है। दूसरे शब्दों में, पूरी तरह से एकीकृत एमएस ऑफ़र, जबकि निश्चित रूप से हमेशा सर्वश्रेष्ठ-ब्रेड नहीं, मेरी राय में एक महत्वपूर्ण मूल्य-जोड़ है।

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


2
ReSharper इस जगह में एक आकर्षक पेशकश है!
गिलहरी

7
आपका उत्तर उत्सुक है, और आत्म-विरोधाभासी लगता है। आप कहते हैं कि आप एक बड़े Microsoft-Shop हैं, लेकिन TFS का उपयोग नहीं करेंगे (जो पूरे बिंदु है- आपको इसके बिना वर्टिकल इंटीग्रेशन का लाभ नहीं मिलेगा) और MSDN सदस्यता मॉडल का उपयोग करें, लेकिन एक गैर का उपयोग कर रहे हैं -एमएस दृष्टिकोण। मैं ईमानदार हूं। अच्छी तरह से बाहर का जवाब, दुर्भाग्य से।
निकोडेमस 13

6

यह एक बड़ी बात नहीं है, उनके बीच स्विच करना बहुत आसान है। MSTest को एकीकृत किया जाना कोई बड़ी बात नहीं है, बस testdriven.net को पकड़ो।

पिछले व्यक्ति की तरह एक नकली रूपरेखा चुनें, इस समय मेरा पसंदीदा Moq है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.