RSpec बनाम ककड़ी (RSpec कहानियाँ) [बंद]


136

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

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

और, एक संगत दूसरे प्रश्न के रूप में: अगर मुझे खीरे की कहानियाँ लिखनी हैं तो क्या मुझे चश्मा लिखना होगा? क्या यह एक ही चीज़ का दोहरा परीक्षण नहीं होगा?


12
कैसे आ हर एकल [बंद] सवाल है कि मैं पार चलो विधेयक छिपकली से और कई बार एक ही समय प्रश्न upvoted है "के रूप में रचनात्मक नहीं" बंद कर दिया है!?! मैं क्या खो रहा हूँ ?
अशोकन ख। नाज़री

4
मैं पूरी तरह सहमत हूँ। मैं अभी भी बहुत उलझन में हूं कि "XXX के लिए सबसे अच्छा अभ्यास क्या है" जैसे प्रश्न पोस्ट करें।
डीन

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

मुझे यह प्रश्न 2017 में मिला क्योंकि यह अभी भी प्रासंगिक है, और अभी भी एक महान प्रश्न है, शानदार उत्तर के साथ। यह भी राय को आमंत्रित नहीं करता है क्योंकि प्रश्न में चौखटे ज्यादातर दो अलग-अलग चिंताओं के लिए एक ही व्यक्ति द्वारा डिज़ाइन किए गए थे ... लेकिन आपको यह जानने के लिए थोड़ी विशेषज्ञता की आवश्यकता होगी।
लूनीवोर

जवाबों:


114

यदि आप पहले से ही नहीं है, तो आप दान उत्तर के उत्कृष्ट लेख, एक कहानी में क्या देखना चाहते हैं ? एक प्रारंभिक बिंदु के रूप में।

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

हमारे रेल काम में, ककड़ी की कहानियां rspec इकाई परीक्षणों के लिए स्थानापन्न नहीं हैं। दोनों हाथ में हाथ डाल कर जातें हैं। व्यवहार में, इकाई परीक्षण मॉडल और नियंत्रकों के विकास को संचालित करते हैं, और कहानियां विचारों के विकास को आगे बढ़ाती हैं (हम अपने विचारों के लिए rspec नहीं लिखते हैं) और संपूर्ण रूप से आवेदन का एक अच्छा परीक्षण प्रदान करते हैं उपयोगकर्ता का दृष्टिकोण।

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


6
आप दो अलग-अलग मुद्दों का सामना कर रहे हैं; 1) यह एकीकरण और स्वीकृति परीक्षण करने के लिए अच्छा है, और 2) उन परीक्षणों को लिखने के लिए एक अच्छा उपकरण है ककड़ी। 1 के लिए - हाँ, यह स्पष्ट रूप से एक अच्छा विचार है। 2 के लिए, शायद ही कभी एक विकास टीम के लिए इतने अधिक अप्रत्यक्ष रूप से भाषा में परीक्षण लिखने के लिए यह अधिक कुशल होता है, जब आप rspec और capybara (या - स्वर्ग की मनाही) में हम बहुत उपयुक्त एकीकरण और स्वीकृति परीक्षण लिख सकते हैं, तो हम रूबी के मानक पुस्तकालय की जांच कर सकते हैं - परीक्षण / यूनिट या मिनिटेस्ट, कैपिबारा के साथ)। नीचे जैक किन्सेला के लिंक को देखें।
ग्राहम एश्टन

पूरी तरह से आप अबी के साथ सहमत हैं! ककड़ी एकीकरण महत्वपूर्ण है!
dpapadopoulos

26

इसे एक चक्र के रूप में सोचें:

अपनी ककड़ी विशेषता को लिखें, फिर उस सुविधा के लिए टुकड़ों को विकसित करते हुए, व्यक्तिगत घटकों को पूरा करने के लिए चश्मा लिखें। तब तक चश्मा पूरा करना जारी रखें जब तक कि आप पास करने के लिए सुविधा के लिए पर्याप्त कार्यक्षमता न लिख लें, फिर अपनी अगली सुविधा लिखें।


1
साइकल के बाहर बीडीडी में एक बहुत अच्छा उदाहरण है ।
रद्मबोर्स्की

21

मेरा मानना ​​है कि उत्पादकता में लागत के कारण खीरे का उपयोग करना एक बुरा विचार है क्योंकि उत्पादकता में लागत आप पर इसके सिंटैक्स आवेगों के कारण होती है। मैंने इस विषय पर बड़े पैमाने पर लिखा कि व्हाईट बर्थ विद ककड़ी टेस्ट?


1
मैंने आपका लेख पढ़ा है और खीरे के प्रशंसक के रूप में, मुझे यह कहना चाहिए कि मैं आपके लेख में आपके द्वारा उद्धृत कई बिंदुओं से सहमत हूँ। हालांकि, मुझे अभी भी लगता है कि खीरा परीक्षण को औपचारिक बनाने और बाहरी लोगों के लिए उन्हें आसानी से उपलब्ध कराने का एक अच्छा तरीका है।
ह्यूग

1
जैक - शानदार पोस्ट। इसे लिखने के लिए बहुत बहुत धन्यवाद, आपने मुझे इसे स्वयं करने की परेशानी से बचाया है।
ग्राहम एश्टन

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

Downvoted। मुझे लगता है कि उपयोगकर्ता की शर्तों में उपयोगकर्ता सुविधाओं का वर्णन करना मेरे लिए उपयोगी है, एक डेवलपर के रूप में, चाहे उपयोगकर्ता कभी भी मेरी ककड़ी कहानियों को पढ़ें। इसलिए मैं अपनी सभी परियोजनाओं में ककड़ी का उपयोग करता हूं और दूसरों को भी इसी तरह प्रोत्साहित करता हूं।
मार्नेन लाईबो-कोसर

8

एक ककड़ी कहानी समग्र समस्या का वर्णन है जो आपके आवेदन को हल कर रही है, बजाय इसके कि व्यक्तिगत बिट्स ऑफ़ कोड वर्क (यानी यूनिट टेस्ट)।

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


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

6

आजकल आप Capybara और सेलेनियम वेबड्राइवर के साथ rspec का उपयोग कर सकते हैं और ककड़ी कहानी के सभी पार्सर बनाने और बनाए रखने से बच सकते हैं। यहाँ मैं सुझाऊंगा:

  1. अपनी कहानी लिखो
  2. RSpec का उपयोग करके, मैं एक एकीकरण परीक्षण पूर्व बनाऊंगा: युक्ति / एकीकरण / मोज़े_rspec.rb
  3. फिर मैं एक एकीकरण परीक्षण बनाऊंगा जिसमें एक नया वर्णन शामिल है और यह प्रत्येक परिदृश्य के लिए ब्लॉक है
  4. तब मैं कम से कम कार्यक्षमता को लागू करने के लिए एकीकरण परीक्षण प्राप्त करने की आवश्यकता होती है और नियंत्रक (मॉडल और आदि) में वापस जाते समय मैं नियंत्रक और मॉडल पर TDD करूंगा।
  5. जैसा कि आप वापस आते हैं, आपका एकीकरण परीक्षण पास होना चाहिए और आप एकीकरण परीक्षण के चरणों को जोड़ना जारी रख सकते हैं
  6. दोहराना

एक बात पर ध्यान दें, हालांकि, नियंत्रक और एकीकरण परीक्षण ओवरलैप हैं जो आवश्यक नहीं हो सकते हैं इसलिए आपको अपने सर्वोत्तम निर्णय का उपयोग करना होगा ताकि आप अपना समय बर्बाद न करें।

इसके अलावा, एक बार जब आप अपने खांचे को ढूंढ लेते हैं, तो आपको BDD का उपयोग करके विकसित करने में सबसे सुखद लगेगा, तब तक आपको दोषी महसूस नहीं होगा यदि आपको ऐसा नहीं लगता है कि आप इसे सही कर रहे हैं और यह नहीं सोचते हैं। तुम बहुत बढ़िया करोगे!


2

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

आपको अभी भी ककड़ी की आवश्यकता है। आपको यह दस्तावेज करने की आवश्यकता है कि आप सिस्टम को कैसे काम करते हुए देखते हैं, और आपको यह सुनिश्चित करने की आवश्यकता है कि जब आप चीजों को बदलते हैं तो आपने कार्यक्षमता को तोड़ा नहीं है।

दूसरे शब्दों में, आपको उन्हीं कारणों के लिए खीरे की कहानियों की आवश्यकता है जैसे आपको यूनिट परीक्षणों की आवश्यकता होती है - वे सिर्फ उच्च स्तर के अमूर्त पर काम करते हैं।


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

1
सही। और ज्यादातर मामलों में, ककड़ी एकीकरण परीक्षण लिखने का सबसे अच्छा तरीका है।
मार्नेन लाईबो-कोसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.