আমি একটি ক্লাস লিখেছি যা মেলচিম্প তালিকায় প্রাপকদের পরিচালনা করে, তাকে মেলচিম্পরিসিপিয়েন্ট বলে। এটি এমসিএপিআই ক্লাস ব্যবহার করে, যা তৃতীয় পক্ষের এপিআই র্যাপার।
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
আমি এমসিএপিআই অবজেক্টটি মেলচিম্পরিসিপিয়েন্ট অবজেক্টের কনস্ট্রাক্টারে পাস করি, তাই আমি পিএইচপিউইনিট ব্যবহার করে ইউনিট পরীক্ষা লিখেছি যা আমার নিজের ক্লাসে সমস্ত যুক্তি পরীক্ষা করে (আমি এমসিএপিআই ক্লাস পরীক্ষা করছি না)। আমার 100% কোড কভারেজ রয়েছে এবং সমস্ত পরীক্ষা পাস হয়। এটি এমসিএপিআই অবজেক্টকে ঠাট্টা-বিদ্রূপ ও স্টাব করে করা হয়।
আমার পরবর্তী পদক্ষেপটি ছিল পিএইচপিউনিট ব্যবহার করে একটি ইন্টিগ্রেশন টেস্ট লিখতে, যেখানে আমি একটি সত্যিকারের মেলচিম্প তালিকা ব্যবহার করার জন্য একটি সত্যিকারের এমসিএপিআই অবজেক্ট ব্যবহার করে মেলচিম্পরিসিপিয়েন্ট ফিক্সচারটি তৈরি করব।
আমি যা লিখেছি তা আমি একীকরণ পরীক্ষা বলে লিখেছি, যা মূলত পরীক্ষাগুলি পুনরায় বস্তুর সার্বজনীন ইন্টারফেসের পুনরুদ্ধার করে, যেমন:
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));
}
"ইন্টিগ্রেশন" পরীক্ষা ক্লাসের ইন্টার্নালগুলির কোনওটি পরীক্ষা করে না - এটি কেবল নিশ্চিত করে যে কোনও আসল এমসিএপিআই বস্তু দেওয়া থাকলে, এটি বিজ্ঞাপন হিসাবে আচরণ করে।
এটা কি সঠিক? এটি কি কোনও আন্তঃসঙ্গতি পরীক্ষা চালানোর সেরা উপায়? সর্বোপরি, ইন্টার্নালগুলি ইউনিট পরীক্ষা দিয়ে পরীক্ষা করা হয়েছে। আমি কি এই ভেবেই ঠিক আছি যে ইন্টিগ্রেশন টেস্ট আছে কিনা তা পরীক্ষা করার জন্য এটি সত্যই কাজ করে, তার আচরণের বিজ্ঞাপনের পদ্ধতি অনুসারে?
এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে, মেলচিম্পরিসিপিয়েন্ট শ্রেণি একটি ইন্টারফেস প্রয়োগ করে, যা অন্যান্য শ্রেণি দ্বারা প্রয়োগ করা হবে। ধারণাটি হ'ল আমার কোডে বিভিন্ন ধরণের মেলিং তালিকা প্রাপক অবজেক্টগুলি পাস করার জন্য একটি কারখানা ব্যবহার করা, যা বিভিন্ন মেলিং তালিকার সরবরাহকারী ব্যবহার করেও সবাই একই কাজ করে। যেহেতু আমার সংহতকরণ পরীক্ষাগুলি সেই ইন্টারফেসটিকে পরীক্ষা করে, ইন্টারফেসটি কার্যকর করে এমন সমস্ত শ্রেণীর জন্য এটি কীভাবে ব্যবহার করা যায়? তারপরে, ভবিষ্যতে, আমি যদি একটি নতুন ক্লাসকে আন্তঃব্যক্তভাবে ব্যবহার করার জন্য ডিজাইন করি, তবে কোনও প্রকল্পে প্রবেশের আগে আমি একই ইন্টিগ্রেশন পরীক্ষা চালাতে পারি।
এই শব্দটি কি যুক্তিসঙ্গত? ইউনিট পরীক্ষাগুলি কোনও বস্তুর অভ্যন্তরীণ পরীক্ষা করে, সংহতকরণ পরীক্ষাগুলি নিশ্চিত করে যে এটি বিজ্ঞাপন হিসাবে আচরণ করে?
setUp
আপনার পরীক্ষা চালানোর জন্য ভিত্তি স্থাপনের জন্য ফাংশনটি ব্যবহার করা উচিত । যদি ইনপুটটি সংজ্ঞায়িত হয় তবে ভাল আপনি সত্যিই পরীক্ষা করতে পারবেন না। ইনপুটটি সুনির্দিষ্ট, কঠোর এবং সর্বদা একই হওয়া দরকার। যদি কোনও পরীক্ষার পূর্ব শর্ত পূরণ না হয় তবে পরিবর্তে পরীক্ষাটি এড়িয়ে যান। তারপরে বিশ্লেষণ করুন কেন এটি এড়িয়ে যায় এবং আপনার যদি অতিরিক্ত পরীক্ষা যুক্ত করতে হয় এবং / অথবা এটি সঠিকভাবে করা setUp
হয় না।
DataProvider
(এটি কোনও পরীক্ষার পরামিতি হিসাবে ইনপুট সরবরাহ করে এমন একটি ফাংশন)।