2009-11-29 15 views
26

मुझे आश्चर्य है, आप केकेपीएचपी में यूनिट-टेस्ट कैसे करते हैं? आप परियोजनाओं में परीक्षण कैसे शामिल करते हैं? प्रोजेक्ट के कौन से हिस्से आप परीक्षण करते हैं? आप कैसे तय करते हैं कि कौन से हिस्सों को यूनिट-परीक्षण किया जाता है? क्या आप अभी भी समय सीमा से पहले नौकरी खत्म करने के लिए मिलता है?केकेपीएचपी में यूनिट परीक्षण?

उत्तर

39

मुझे आश्चर्य है, आप कैसे हैं केकपीएचपी में यूनिट-टेस्ट? आप परियोजनाओं में परीक्षण कैसे शामिल करते हैं?

मैं आमतौर पर केक कोर द्वारा उपयोग किए जाने वाले सरलतम सेटअप का उपयोग करता हूं। मैंने प्रत्येक नियंत्रक और मॉडल के लिए एक परीक्षण फ़ाइल स्थापित की है। यदि आम तौर पर कोड में जटिल विकल्प होते हैं या सहायक में बड़े पैमाने पर परिवर्तनीय आउटपुट होता है तो मैं आम तौर पर मददगार/घटकों/व्यवहारों के आउटपुट का परीक्षण करता हूं। मुझे लगता है कि मेरा कवरेज लगभग 65-75% है और मेरे परीक्षणों के साथ कोड कवरेज की इतनी कम डिग्री के साथ (फाइलों के सीमित सबसेट का 65% बहुत कमजोर है) मैं पाया गया परीक्षणों के माध्यम से अधिक बग स्पॉट या ठीक करता हूं और बिना सही ढंग से तय किया गया।

क्या किसी प्रोजेक्ट के कुछ हिस्सों में आप परीक्षण करते हैं? आप कैसे निर्णय लेते हैं यूनिट-परीक्षण कैसे किया जाता है?

मैं हमेशा सभी मॉडल कार्यों का परीक्षण करता हूं। कस्टम खोज, पेजिनेटेड परिणाम सेट आदि। मैं उन्हें निम्नलिखित के लिए परीक्षण करता हूं। परिणाम की सही संख्या (स्थिरता डेटा पर एक खोज से), सही परिणाम (स्थिरता डेटा पर एक खोज से), लौटाए गए फ़ील्ड की शुद्धता, वापस आने वाले परिणामों की संख्या और प्रत्येक कस्टम खोज प्रकार के लिए एक सही डेटासेट। अगर मैं किसी भी पाता, कस्टम या अन्यथा पर पेजिनेटेड सेट का उपयोग कर रहा हूं तो सही अंकन।

मैं हमेशा नियंत्रक कार्यों का परीक्षण करता हूं जिसके परिणामस्वरूप एक दृश्य प्रस्तुत नहीं किया जाता है।एक आदत के रूप में मैं सभी तर्क को स्थानांतरित करता हूं जो सेटिंग्स को समर्पित करने के लिए समर्पित नहीं है या नियंत्रक में निजी/संरक्षित कार्यों को प्रस्तुत करने या मॉडल फ़ंक्शन कॉल करने के लिए दृश्य चुनने के लिए समर्पित नहीं है। यह मुझे बचे हुए नियंत्रक क्रियाओं (दृश्य आउटपुट वाले वाले) का परीक्षण करने देता है। यदि मैं पर सभी पर एक दृश्य प्रस्तुत करता हूं तो उन कार्यों को के साथ किसी भी समस्या के साथ ठीक से व्यवहार करने की संभावना है कॉल स्टैक को और आगे बढ़ाया जा रहा है।

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

यदि कोई घटक कहीं से डेटा लेता है और इसे कुशलतापूर्वक उपयोग करता है तो मैं प्रारूपों की जांच करता हूं या घटक कार्यों पर भी डेटा लौटाता हूं। व्यवहार के लिए वही।

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

क्या आप अभी भी पर समय सीमा से पहले नौकरी खत्म कर चुके हैं?

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


मैं इस दोनों वास्तविक परीक्षण तकनीक के लिए कम से और एक तरह से है कि वे कैसे एक साथ आने का एक दृश्य भावना प्राप्त करने के लिए के रूप में देखने के लिए कुछ लिंक में जोड़ने के लिए संपादित।

  1. http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite
  2. http://book.cakephp.org/view/160/Testing
  3. http://debuggable.com/posts/unit-testing-in-cakephp-part-1---introduction-to-unit-testing:48102610-c5d0-4398-a010-76974834cda3
  4. http://mark-story.com/nodes/view/testing-cakephp-controllers-the-hard-way

इसके अलावा, मैं इस बात से सहमत है और परीक्षण लेखन पर केक devs से सहमत नहीं है। यह किसी भी चीज का परीक्षण करने के लिए एक बहुत अच्छा विचार है जिसे आप पुन: उपयोग करना चाहते हैं - चाहे वह एक घटक फ़ाइल हो या जटिल प्लगइन हो - क्योंकि आप इसे वितरित करेंगे और परीक्षण दोनों कामकाजी कोड दिखाएंगे और इस बात के महान उदाहरण हैं कि क्या किया जा सकता है कोड का एक टुकड़ा

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

+1

भयानक उत्तर के लिए बहुत बहुत धन्यवाद :) – user133127

+1

आपका स्वागत है - मुझे इस पोस्ट को लोकप्रिय होने की उम्मीद नहीं थी। –

4

आप this पर एक नज़र डालना चाहते हैं।

मैं केकपीएचपी से बहुत परिचित नहीं हूं, लेकिन मैं आमतौर पर PHPUnit का उपयोग करता हूं। मैं Netbeans का उपयोग करता हूं, जो PHPUnit को अच्छी तरह से एकीकृत करता है (मुझे नहीं पता कि यह आपके लिए एक विकल्प है)। आपके द्वारा उपयोग किए जाने वाले वेब ढांचे से स्वतंत्र यूनिट परीक्षणों को चलाने के लिए संभव है।

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

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

लेखन परीक्षा खर्च करने का समय अनुत्पादक प्रतीत हो सकता है, क्योंकि यह सीधे कार्यक्षमता का नेतृत्व नहीं करता है, लेकिन यह समय के साथ वास्तव में महत्वपूर्ण भूमिका निभाता है। इसे बीमा के रूप में देखें।

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