2009-12-20 16 views
7

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

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

उत्तर

16

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

यह परीक्षण करने के लिए कठिन चीजों को बनाता है:

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


ध्यान दें कि मैं "एकीकरण" परीक्षण उस तरह का नहीं कहा उपयोगी नहीं है, btw ;-)


फिर भी है, फोर्जिंग $_POST सरणी काफी सरल है: इसे पढ़ा नहीं है केवल, और आप जो कुछ भी चाहते हैं उसे स्टोर कर सकते हैं।

तो, अपने परीक्षण-मामले की शुरुआत में, आपको कुछ भी आवश्यक डेटा इंजेक्शन देने से रोकता है।

+0

काम करता है धन्यवाद। उपयोगी जानकारी। –

+0

@PascalMARTIN 'phpunit' के साथ फ़ाइल अपलोड परीक्षण के बारे में क्या है? – Eugene

2

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

0

मैं पास्कल से सहमत हूं कि $ _POST सरणी केवल पढ़ने योग्य सरणी नहीं है और आप इसे आवश्यकतानुसार कुशल बना सकते हैं। इसके अलावा यह अपने ढांचे पर निर्भर करता है, Zendframework चर में हेरफेर करने के freat Flexiblility उदाहरण के रूप में लिंक में

http://xebee.xebia.in/2010/02/05/test-driven-development-with-zend-framework-and-phpunit/comment-page-1/#comment-3431

प्रदान करता है लेकिन यहाँ आप ढीला (कथनों की तरह बनाया गया समारोह में PHPUnit के उपयोग करने का लाभ डेटाप्रोवाइडर, आदि) लेकिन हमारे ज्यादातर मामलों में हम ग्लोबल एरे $ _POST, $ _GET, या $ _REQUEST का उपयोग करते हैं और जब हम PHPUnit उदाहरण देखते हैं, तो हम "PHPUnit में POST चर सेट करने के लिए कैसे करें" क्योंकि PHPUnit एमवीसी को डीमोस्टेट नहीं करता है टेस्ट केस (हालांकि चम्मच खिला रहा है) हमें अपने ढांचे का उदाहरण प्राप्त करने की आवश्यकता है और फिर हम अपने फ्रेम के चारों ओर खेल सकते हैं काम और PHPUnit इसके अलावा परीक्षण का आपका तरीका अलग-अलग तरीका होगा

0

ठीक है आपको बस इस तरह की पोस्ट var सेट करना है।

$ this-> reques -> setMethod ('पोस्ट') -> setPost (सरणी ( 'param1' => 'VALUE1', 'param2' => 'मान 2' ));

मुझे आशा है कि आप के लिए

रखें मुस्कान Kdecom