পরীক্ষার বিভিন্ন পদ্ধতি
প্রথমে আপনি যা করছেন তা নির্ধারণ করুন: ইউনিট পরীক্ষা বা ইন্টিগ্রেশন টেস্টিং । স্তরগুলির সংখ্যা ইউনিট পরীক্ষার জন্য অপ্রাসঙ্গিক কারণ আপনি সম্ভবত একটি ক্লাস সবচেয়ে বেশি পরীক্ষা করেন। বাকি আপনি বিদ্রূপ। সংহতকরণ পরীক্ষার জন্য আপনি একাধিক স্তর পরীক্ষা করা অনিবার্য। যদি আপনার জায়গায় ভাল ইউনিট পরীক্ষা থাকে তবে কৌশলটি হল ইন্টিগ্রেশন পরীক্ষাগুলি খুব জটিল না করে তোলা।
যদি আপনার ইউনিট পরীক্ষাগুলি ভাল হয় তবে আপনাকে ইন্টিগ্রেশন টেস্টিং করার সময় সমস্ত বিবরণ পরীক্ষার পুনরাবৃত্তি করতে হবে না।
শর্তাদি আমরা ব্যবহার করি, সেগুলি কিছুটা প্ল্যাটফর্ম নির্ভর, তবে আপনি এগুলি প্রায় সব পরীক্ষার / বিকাশ প্ল্যাটফর্মে খুঁজে পেতে পারেন:
উদাহরণ প্রয়োগ
প্রযুক্তির উপর নির্ভর করে আপনি নামগুলি ব্যবহার করতে পারেন ভিন্ন হতে পারে, তবে আমি এটি উদাহরণ হিসাবে ব্যবহার করব:
আপনার কাছে যদি মডেল পণ্য, পণ্যাদি নিয়ন্ত্রণকারী এবং একটি সূচক ভিউ যা পণ্যগুলির সাথে একটি এইচটিএমএল টেবিল তৈরি করে তার সাথে একটি সাধারণ CRUD অ্যাপ্লিকেশন থাকে:
অ্যাপ্লিকেশনটির শেষ ফলাফলটি সক্রিয় রয়েছে এমন সমস্ত পণ্যের একটি তালিকা সহ একটি এইচটিএমএল টেবিল দেখাচ্ছে।
অংশ পরিক্ষাকরণ
মডেল
মডেলটি আপনি বেশ সহজে পরীক্ষা করতে পারেন। এটির জন্য বিভিন্ন পদ্ধতি রয়েছে; আমরা ফিক্সচার ব্যবহার। আমি মনে করি এটিই আপনি "জাল ডেটাসেট" বলছেন। সুতরাং প্রতিটি পরীক্ষা চালানোর আগে আমরা টেবিলটি তৈরি করি এবং মূল তথ্য রাখি। বেশিরভাগ প্ল্যাটফর্মের জন্য এটির পদ্ধতি রয়েছে। উদাহরণস্বরূপ, আপনার পরীক্ষার শ্রেণিতে, একটি পদ্ধতি সেটআপ () যা প্রতিটি পরীক্ষার আগে চালিত হয়।
তারপরে আমরা আমাদের পরীক্ষা চালাই, উদাহরণস্বরূপ: টেস্টগেটএলএ্যাকটিভ পণ্য।
সুতরাং আমরা একটি পরীক্ষা ডাটাবেস সরাসরি পরীক্ষা। আমরা ডেটাসোর্সকে উপহাস করি না; আমরা সবসময় একই। এটি আমাদের উদাহরণস্বরূপ ডাটাবেসের একটি নতুন সংস্করণ দিয়ে পরীক্ষা করার অনুমতি দেয় এবং যে কোনও প্রশ্নের প্রশ্ন সামনে আসবে।
বাস্তব বিশ্বে আপনি সর্বদা 100% একক দায়িত্ব অনুসরণ করতে পারবেন না । আপনি যদি এটি আরও ভাল করতে চান তবে আপনি এমন একটি ডেটাসোর্স ব্যবহার করতে পারেন যা আপনাকে উপহাস করে। আমাদের জন্য (আমরা একটি ওআরএম ব্যবহার করি) যা ইতিমধ্যে বিদ্যমান প্রযুক্তি পরীক্ষার মতো মনে করে। এছাড়াও পরীক্ষাগুলি আরও জটিল হয়ে যায় এবং এগুলি সত্যই কোয়েরিগুলি পরীক্ষা করে না। সুতরাং আমরা এটি এইভাবে রাখা।
হার্ড কোডেড ডেটা আলাদাভাবে ফিক্সচারে সংরক্ষণ করা হয়। সুতরাং ফিক্সচারটি এসকিউএল ফাইলের মতো একটি তৈরি টেবিল স্টেটমেন্ট এবং আমাদের ব্যবহার করা রেকর্ডগুলির জন্য সন্নিবেশ করে। প্রচুর রেকর্ড দিয়ে পরীক্ষা করার সত্যিকারের প্রয়োজন না হলে আমরা তাদের ছোট রাখি।
class ProductModel {
public function getAllActive() {
return $this->find('all', array('conditions' => array('active' => 1)));
}
}
নিয়ামক
কন্ট্রোলারের আরও বেশি কাজ করা প্রয়োজন, কারণ আমরা এটির সাথে মডেলটি পরীক্ষা করতে চাই না। সুতরাং আমরা যা করি তা হল মডেলটিকে উপহাস করা। এর অর্থ: আমরা পরীক্ষা করি: সূচি () পদ্ধতি যা রেকর্ডের একটি তালিকা ফেরত দেয়।
সুতরাং আমরা মডেল পদ্ধতিটি getAllActive () কে উপহাস করব এবং এতে স্থির ডেটা যুক্ত করব (উদাহরণস্বরূপ দুটি রেকর্ড)। এখন আমরা নিয়ন্ত্রণকারীর দর্শনে যে ডেটা প্রেরণ করা হয় তা পরীক্ষা করি এবং আমরা যদি সত্যিই এই দুটি রেকর্ড ফিরে পাই তবে তুলনা করি।
function testProductIndexLoggedIn() {
$this->setLoggedIn();
$this->ProductsController->mock('ProductModel', 'index', function(return array(your records) ));
$result=$this->ProductsController->index();
$this->assertEquals(2, count($result['products']));
}
তাতেই চলবে. আমরা নিয়ামকের সাথে সামান্য কার্যকারিতা যুক্ত করার চেষ্টা করি কারণ এটি পরীক্ষাকে শক্ত করে তোলে। তবে অবশ্যই এটিতে কিছু কোড থাকে। উদাহরণস্বরূপ, আমরা প্রয়োজনীয়তাগুলি পরীক্ষা করি যেমন: আপনি লগ ইন থাকলে কেবলমাত্র এই দুটি রেকর্ড দেখান।
সুতরাং, নিয়ামকের জন্য সাধারণত একটি উপহাস এবং হার্ডকডযুক্ত ডেটার একটি ছোট অংশ দরকার হয়। একটি লগইন সিস্টেমের জন্য সম্ভবত অন্য এক। আমাদের পরীক্ষায় এটির জন্য আমাদের একটি সহায়ক পদ্ধতি রয়েছে: সেটলোগডইন ()। এটি লগইন সহ বা লগইন ছাড়াই পরীক্ষা করা সহজ করে তোলে।
class ProductsController {
public function index() {
if($this->loggedIn()) {
$this->set('products', $this->ProductModel->getAllActive());
}
}
}
দেখেছে
ভিউ পরীক্ষা করা শক্ত। প্রথমে আমরা যুক্তিগুলি পৃথক করি যা পুনরাবৃত্তি করে। আমরা এটি হেল্পারে রেখেছি এবং সেই ক্লাসগুলি কঠোরভাবে পরীক্ষা করি। আমরা সর্বদা একই আউটপুট আশা করি। উদাহরণস্বরূপ, HtmlTableFromArray () উত্পন্ন করুন।
তারপরে আমাদের কিছু প্রকল্প নির্দিষ্ট মতামত রয়েছে। আমরা সেগুলি পরীক্ষা করি না। এটি ইউনিট পরীক্ষা করা সত্যই পছন্দসই নয়। আমরা তাদের একীকরণ পরীক্ষার জন্য রাখি। কারণ আমরা এখানে প্রচুর কোড দর্শনে নিয়েছি আমাদের এখানে ঝুঁকি কম।
আপনি যদি পরীক্ষাগুলি শুরু করেন তবে প্রতিবার আপনার এইচটিএমএলের একটি অংশ পরিবর্তন করার দরকার রয়েছে যা বেশিরভাগ প্রকল্পের জন্য কার্যকর নয়।
echo $this->tableHelper->generateHtmlTableFromArray($products);
ইন্টিগ্রেশন টেস্টিং
আপনার প্ল্যাটফর্মের উপর নির্ভর করে আপনি ব্যবহারকারীদের গল্পগুলির সাথে কাজ করতে পারেন ইত্যাদি etc. এটি সেলেনিয়াম বা অন্যান্য তুলনামূলক সমাধানগুলির মতো ওয়েবভিত্তিক হতে পারে ।
সাধারণত আমরা কেবল ফিক্সচারগুলি দিয়ে ডাটাবেস লোড করি এবং কোন ডেটা উপলব্ধ হবে তা জোর দিয়েছি। সম্পূর্ণ সংহতকরণ পরীক্ষার জন্য আমরা সাধারণত খুব বৈশ্বিক প্রয়োজনীয়তা ব্যবহার করি। সুতরাং: পণ্যটি সক্রিয় করতে সেট করুন এবং তারপরে পণ্যটি উপলব্ধ হয় কিনা তা পরীক্ষা করুন।
সঠিক ক্ষেত্রগুলি উপলভ্য কিনা তা আমরা পছন্দ করি না everything আমরা এখানে বড় প্রয়োজন পরীক্ষা। যেহেতু আমরা নিয়ামক বা দর্শন থেকে আমাদের পরীক্ষার সদৃশ করতে চাই না। যদি সুরক্ষার কারণে বা অ্যাপ্লিকেশনটির কোনও কী সত্যিই আপনার মূল / মূল অংশ থাকে (চেক পাসওয়ার্ড পাওয়া যায় না) তবে এটি সঠিক তা নিশ্চিত করার জন্য আমরা এগুলি যুক্ত করি।
হার্ড কোডড ডেটা ফিক্সচারে সংরক্ষণ করা হয়।
function testIntegrationProductIndexLoggedIn() {
$this->setLoggedIn();
$result=$this->request('products/index');
$expected='<table';
$this->assertContains($expected, $result);
// Some content from the fixture record
$expected='<td>Product 1 name</td>';
$this->assertContains($expected, $result);
}