2012-05-01 8 views
20

में नकली कैसे करें/मुझे पता है कि बीडीडी बनाने में डैन नॉर्थ के इरादे में से एक को शब्दावली को परीक्षण डोमेन की जटिलता से दूर ले जाना था। हालांकि, बाहरी दृष्टिकोण को लागू करने में, ऐसा लगता है कि हमें अभी भी मजाकिया व्यवहार (या अगर आप पसंद करते हैं) की कुछ समझ की आवश्यकता है। उत्तर this video में सुझाव देता है कि यदि मैं बाहरी डोमेन ऑब्जेक्ट्स से शुरू करता हूं और अपना रास्ता अंदरूनी तरीके से काम करता हूं, तो मैं सहयोगियों को नकल करता हूं क्योंकि मैं उन्हें खोजता हूं और बाद में उन्हें उचित कार्यान्वयन के साथ बदल देता हूं। तो अंत में, मैं एंड-टू-एंड परीक्षणों के सेट के साथ समाप्त होता हूं।बीडीडी

मार्टिन Fowler this blog post में यह देखने के लिए लग रहा था थोड़ा अलग तरह से जब वह TDD के दो शिविरों में परिभाषित किया गया: "शास्त्रीय TDD" जो असली वस्तुओं जहां संभव का उपयोग करता है और एक नकली जब आवश्यक है, और "mockist TDD" जो ज्यादातर स्थितियों में mocks पसंद । उन्होंने बीडीडी को उत्तरार्द्ध की ओर झुकाव के रूप में देखा। आईई, कि एक सुविधा के विकास के अंत में, "नकली" दृष्टिकोण वास्तविक परीक्षणों में मोक्स छोड़ देगा (बीडीडी चर्चा में उस शब्द का उपयोग करने के लिए खेद है)।

निष्पक्षता में, दोनों सामग्रियां साल पुरानी हैं, और शायद चीजें स्पष्ट हो गईं क्योंकि बीडीडी इकाई स्तर और स्वीकृति स्तर पर लागू होने के बीच लाइन के साथ विकसित हुआ।

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

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

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

उत्तर

6

मुझे लगता है कि कुंजी बीडीडी के व्यवहार पर ध्यान केंद्रित करना है - व्यवहार।

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

उदाहरण के तौर पर, एक हालिया (सरल) WPF एप्लिकेशन में जो मैं बना रहा था: स्वीकृति परीक्षण व्यूमोडेल को एप्लिकेशन के प्रवेश/बाहरी बिंदु के रूप में उपयोग करता है - और डेटा से नीचे सब कुछ रेपोजिटरीज का मज़ाक उड़ाया गया था। आवेदन के सभी नियम और तर्क दोनों के बीच कहीं मौजूद थे - और वास्तव में, वे एप्लिकेशन के व्यवहार हैं जिन्हें निर्दिष्ट और परीक्षण करने की आवश्यकता है।

1

मॉक करने के लिए आर्किटेक्चर पर निर्भर करता है। एमवीवीएम के लिए आप दृश्य-मॉडल का परीक्षण करने के लिए मॉडल का नकल कर सकते हैं। एमवीपी के लिए आप प्रस्तुतकर्ता का परीक्षण करने के लिए दृश्य और/या मॉडल का नकल कर सकते हैं। यदि आप यूनिट परीक्षणों के बजाय एंड-टू-एंड टेस्ट लिखना चाहते हैं, तो आप दृश्य-मॉडल/प्रस्तुतकर्ता के माध्यम से एप्लिकेशन (सेवा/डेटाबेस परत) के दूसरे छोर पर परीक्षण करें।

7

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

अब अगर मेरा मेमोरी स्टोरेज में मेरा एप्लिकेशन प्लग करता है और मैं ऐप से अपने एपीआई स्तर (इसलिए यूआई के नीचे) से बात करता हूं। मैं उम्मीद करता हूं कि यह बिल्कुल वही व्यवहार करे।

अब यह बात है, हमें व्यवहार से क्या मतलब है, इस बारे में स्पष्ट होना चाहिए, जब हम बीडीडी करते हैं तो हम क्या व्यवहार करते हैं।

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

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

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

डीबी के लिए मैं सिर्फ यह जांचने के लिए एकीकरण परीक्षण लिखूंगा कि मेरी वास्तविक भंडार डीबी पर सामान पढ़ने और लिखने में सक्षम हैं।

और आखिरकार मैं एक साथ वायर्ड होने पर सबकुछ ठीक होने के लिए परीक्षणों के अंत में कुछ अंत लिखूंगा।

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