मैंने एक वर्ग लिखा है जो MailChimpRecipient नामक MailChimp सूची में प्राप्तकर्ताओं का प्रबंधन करता है। यह MCAPI वर्ग का उपयोग करता है, जो एक तृतीय-पक्ष एपीआई आवरण है।
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
मैं MailChimpRecipient ऑब्जेक्ट के कंस्ट्रक्टर में MCAPI ऑब्जेक्ट को पास करता हूं, इसलिए मैंने PHPUnit का उपयोग करके यूनिट टेस्ट लिखा है जो मेरी अपनी कक्षा में सभी लॉजिक का परीक्षण करता है (मैं MCAPI क्लास का परीक्षण नहीं कर रहा हूं)। मेरे पास 100% कोड कवरेज है और सभी परीक्षण पास हैं। यह MCAPI ऑब्जेक्ट को मॉकिंग और स्टबिंग करके किया जाता है।
मेरा अगला चरण एक एकीकरण परीक्षण लिखना था, PHPUnit का उपयोग करके भी, जहां मैं एक वास्तविक MCAPI सूची का उपयोग करने के लिए सेट की गई वास्तविक MCAPI ऑब्जेक्ट का उपयोग करके MailChimpRecipient स्थिरता का निर्माण करूंगा।
मैंने लिखा है कि मुझे लगता है कि एक इंटरग्रेशन टेस्ट है, जो मूल रूप से परीक्षण फिर से ऑब्जेक्ट के सार्वजनिक इंटरफ़ेस को चलाता है, जैसे:
public function testAddedRecipientCanBeFound()
{
$emailAddress = 'fred@fredsdomain.com';
$forename = 'Fred';
$surname = 'Smith';
// First, delete the email address if it is already on the list
$oldRecipient = $this->createRecipient();
if($oldRecipient->find($emailAddress))
{
$oldRecipient->delete();
}
unset($oldRecipient);
// Add the recipient using the test data
$newRecipient = $this->createRecipient();
$newRecipient->setForename($forename);
$newRecipient->setSurname($surname);
$newRecipient->setEmailAddress($emailAddress);
$newRecipient->add();
unset($newRecipient);
// Assert that the recipient can be found using the same email address
$this->assertTrue($this->_recipient->find($emailAddress));
}
"एकीकरण" परीक्षण कक्षा के किसी भी आंतरिक परीक्षण नहीं करता है - यह सिर्फ यह सुनिश्चित करता है कि एक वास्तविक MCAPI वस्तु दी गई है, यह विज्ञापित के रूप में व्यवहार करता है।
क्या ये सही है? क्या यह एक अंतर परीक्षण परीक्षण चलाने का सबसे अच्छा तरीका है? आखिरकार, इंटर्नल को एक इकाई परीक्षण के साथ परीक्षण किया गया है। क्या मैं यह सोचने में सही हूं कि एकीकरण परीक्षण यह परीक्षण करने के लिए है कि यह वास्तव में काम करता है, जिस तरह से इसका व्यवहार विज्ञापित है?
इसे एक कदम आगे ले जाने के लिए, MailChimpRecipient वर्ग एक इंटरफ़ेस लागू करता है, जिसे अन्य वर्गों द्वारा भी लागू किया जाएगा। विभिन्न प्रकार के मेलिंग सूची प्राप्तकर्ता ऑब्जेक्ट्स को मेरे कोड में पास करने के लिए एक कारखाने का उपयोग करने का विचार है, जो सभी समान काम करते हैं, अलग-अलग मेलिंग सूची प्रदाताओं का उपयोग करते हुए। चूंकि मेरा एकीकरण परीक्षण उस इंटरफ़ेस का परीक्षण करता है, इसलिए इंटरफ़ेस को लागू करने वाले सभी वर्गों के लिए इसका उपयोग कैसे करें? फिर, भविष्य में, यदि मैं एक नए वर्ग को परस्पर उपयोग करने के लिए डिज़ाइन करता हूं, तो मैं इसे प्रोजेक्ट में सम्मिलित करने से पहले एक ही एकीकरण परीक्षण चला सकता हूं।
क्या यह आवाज़ उचित है? इकाई परीक्षण किसी वस्तु के आंतरिक परीक्षणों का परीक्षण करते हैं, अंतर परीक्षण परीक्षण सुनिश्चित करते हैं कि यह विज्ञापित के रूप में व्यवहार करता है?
setUp
अपने परीक्षणों को चलाने के लिए आधार स्थापित करने के लिए फ़ंक्शन का उपयोग करना चाहिए । यदि इनपुट अपरिभाषित है, तो आप वास्तव में परीक्षण नहीं कर सकते। इनपुट को सटीक, सख्त और हमेशा समान होना चाहिए। यदि एक परीक्षण का पूर्व शर्त पूरा नहीं हुआ है, तो इसके बजाय परीक्षण को छोड़ दें। फिर विश्लेषण करें कि यह क्यों रुक जाता है और यदि आपको अतिरिक्त परीक्षण और / या जोड़ने की आवश्यकता है, तो यह setUp
सही नहीं है।
DataProvider
(यह एक परीक्षण के लिए मापदंडों के रूप में इनपुट की पेशकश करता है)।