2009-10-05 13 views
14

मैं सिर्फ देखा यह हास्यास्पद YouTube Video about unit testing (यह नकली उपशीर्षक अच्छा इकाई परीक्षण नहीं करने के लिए उनकी टीम को बाहर चबाने के साथ हिटलर है - इसे छोड़ अगर आप हास्य रहे बिगड़ा) जहां स्टब्स जी भरकर आलोचना मिलता है। लेकिन मुझे समझ में नहीं आता कि स्टब्स के साथ क्या गलत है।यूनिट परीक्षण के लिए स्टब्स के साथ क्या गलत है?

मैं एक मजाक ढांचे का उपयोग कर शुरू नहीं किया है और मैं एक का उपयोग नहीं से दर्द महसूस शुरू नहीं किया है।

मैं में एक विश्व के लिए एक चोट कुछ समय Am लाइन, having chosen handwritten stubs and fakes instead of mocks (like Rhinomock etc)? (फाउलर की वर्गीकरण का प्रयोग करके)

क्या एक नकली और हस्तलिखित ठूंठ के बीच चुनने के लिए विचार कर रहे हैं नीचे? कम से कम बॉयलरप्लेट के साथ किसी भी विधि की कार्रवाई ओवरराइड करने के लिए क्षमता के साथ, पूर्व टोंटदार

+1

आप एक मॉकिंग फ्रेमवर्क (मैं गैंडो का उपयोग कर) का उपयोग कर अपने आप को देय है। आपके टीडीडी जीवन को आसान बनाने के लिए वे बहुत सी चीजें करेंगे। चार्ट के लिए – mxmissile

उत्तर

11

स्टब्स के साथ कुछ भी गलत नहीं है, स्टब्स, मोजे ... और जासूसों के लिए जगह है। सभी "परीक्षण युगल" हैं, लेकिन विभिन्न उद्देश्यों के साथ Mocks and Stubs aren't Spies:

[...] आगे बढ़ने से पहले, मैं उपयोग में कुछ शर्तों को स्पष्ट और परिभाषित करना चाहता हूं, जिसे मैंने मूल रूप से जेरार्ड मेस्ज़ारोस 'xUnit Patterns book में खोजा था।

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

[...] और अगर आप इस काम चार्ट दे सकते हैं अपने निर्णयों के मार्गदर्शन:

alt text http://www.hamletdarcy.com/files/2007/MocksAreNotSpies.jpg

पीएस: Mockito - The New Mock Framework on the Block भी पढ़ने योग्य है।

+0

+1। चार्ट के लिए – TrueWill

+1

+0.5, चार्ट के लिए – guerda

+1

-1 लिंक के लिए +0.5, यह मूल रूप से गलत है। मोक्स दावे पर असफल हो सकते हैं, उन्हें बनाए रखना आसान हो सकता है, और आसपास के आसपास उपयोग करना बहुत आसान है। मुझे लगता है कि चार्ट पुराना हो सकता है या पुराने मॉकिंग फ्रेमवर्क या जावा की पुरानी भाषा/संस्करण में एक ढांचा के खिलाफ हो सकता है। (वास्तव में वोटिंग -1 नहीं है, लेकिन वह चार्ट खराब है) –

5

Mocks अब और भी आसान में फेंक रहे हैं। वे अपनी कक्षा का एक वास्तविक उदाहरण हैं।

बहुत कम विचार हैं जैसे: यदि आप किसी भी तरीके से निपटना नहीं चाहते हैं, तो आप या तो इसे नो-ऑप के रूप में कार्य कर सकते हैं या परीक्षण में असफल हो सकते हैं - आपकी पसंद - लेकिन या तो वस्तुतः कोई कोड नहीं।

जब आप कक्षा को बाहर निकालते हैं तो आपको कितना बॉयलरप्लेट मिलता है? यदि आपकी कक्षा अंतिम है तो आप इसे कैसे संभालेंगे? क्या आप क्लासपाथ पर अपना स्टब प्राप्त करने के लिए चाल खेलते हैं, या आप अलग-अलग स्रोत का उपयोग करते हैं?

मैं सिर्फ मोजे से शुरू करने की सलाह देता हूं - यह चारों ओर आसान है।

0

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

मैं वर्तमान में मजाक और छोटा करते के लिए MOQ उपयोग कर रहा हूँ।

3

मोजे के बजाए स्टब्स का उपयोग करने में कुछ भी गलत नहीं है।

आप तकनीकी प्राप्त करना चाहते हैं, mocks उम्मीदों कि सत्यापित किया जा सकता के साथ "स्मार्ट" वस्तुओं रहे हैं। स्टब्स डमी ऑब्जेक्ट्स हैं जो प्रीसेट मान वापस करते हैं। Mocks Aren't Stubs देखें।

लेकिन कई लोगों को (अपने आप को शामिल) राज्य स्टब्स के साथ बजाय mocks के साथ व्यवहार परीक्षण परीक्षण करना पसंद करते हैं। आप परीक्षण के तहत कक्षा में एक स्टब इंजेक्ट करते हैं, आप एक विधि कहते हैं, फिर आप परीक्षा के तहत कक्षा की स्थिति की जांच करते हैं। यह तर्क देने के मुकाबले कम भंगुर परीक्षण करता है कि कक्षा के इंटर्नल को तर्क के साथ एक नकली वस्तु के विधि एक्स कहा जाता है।

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

यदि आपके पास बहुत से इंटरफेस हैं, या यदि आपके इंटरफेस में बहुत सी विधियां हैं, तो अलगाव/मॉकिंग फ्रेमवर्क हाथ-कोडिंग स्टब्स पर बहुत समय बचा सकता है।

मुझे Moq बहुत पसंद है; मुझे स्टब्स बनाने के लिए राइनो मोक्स की तुलना में उपयोग करना आसान लगता है।

8

मैं निम्नलिखित शब्दावली (रॉय Osherove, यूनिट-परीक्षण की कला के लेखक द्वारा शुरू की गई) का उपयोग करें:

एक नकली एक ठूंठ कहा जाता है अगर आप मामले एक में नकली कुछ करने के लिए कह इस तरह के और पैरामीटर के साथ विधि कहा जाता है। लेकिन अगर आप यह भी सत्यापित करते हैं कि वास्तव में ऐसा कॉल हुआ या वास्तव में एन बार हुआ, तो इस तरह के नकली को नकली कहा जाता है। संक्षेप में। नकली एक स्टब है जब तक आप इसे सत्यापित() पर कॉल नहीं करते हैं और फिर यह एक नकली है।

जाहिर है, आपको कुछ मामलों में स्टब्स और दूसरों में झटके का उपयोग करने की आवश्यकता होगी। तो, गोलियों की गोलियों की आलोचना करना शायद गलत है और विशेष रूप से स्टब्स का उपयोग करना भी गलत है।

यदि आपने एक मॉकिंग फ्रेमवर्क (वैकल्पिक शब्द: अलगाव फ्रेमवर्क) का उपयोग शुरू नहीं किया है, तो आपको उन पर नजर रखना चाहिए और अक्सर अपने विकल्पों का पुनर्मूल्यांकन करना चाहिए। मैं मैनुअल मैक्स से NMock2 से Moq तक बहुत जल्दी चला गया। प्रोग्रामर के एक दिलचस्प poll यहां दिखाया गया है जो दिखाता है कि वे क्या उपयोग करते हैं। मैनुअल मोजे/स्टब्स अल्पसंख्यक में हैं, लेकिन यह असामान्य नहीं हैं।

+1

आर्ट ऑफ यूनिट टेस्टिंग (अच्छी किताब) और मोक (अच्छा टूल) के लिए +1। – TrueWill

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