পদ্ধতি প্রতি কত পরীক্ষা?
তাত্ত্বিক এবং অত্যন্ত অবৈজ্ঞানিক সর্বাধিক হ'ল এন-পাথ জটিলতা (সমস্ত পরীক্ষাগুলি কোডের মাধ্যমে বিভিন্ন উপায়ে কভার করে ধরে নিন;))। সর্বনিম্ন এক! প্রতি জনসাধারণের পদ্ধতি অনুসারে, তিনি বাস্তবায়নের বিশদটি পরীক্ষা করেন না, কেবল কোনও শ্রেণীর বহিরাগত আচরণ (ফিরিয়ে দেওয়া মানগুলি এবং অন্যান্য বস্তুকে কল করা)।
আপনি উদ্ধৃতি:
* এবং আপনার প্রতিটি পদ্ধতির নিজস্ব পরীক্ষা পদ্ধতি (1-1 সম্পর্কের ক্ষেত্রে) দিয়ে পরীক্ষা করার চিন্তাভাবনা হাস্যকর হবে। *
এবং তারপরে জিজ্ঞাসা করুন:
সুতরাং যদি প্রতিটি পদ্ধতির জন্য একটি পরীক্ষা তৈরি করা হয় 'হাস্যকর', আপনি / পরীক্ষার জন্য যা লেখেন তা আপনি / কখন বেছে নিলেন?
তবে আমি মনে করি আপনি এখানে লেখককে ভুল বুঝেছেন:
থাকার ধারণা one test method
প্রতি one method in the class to test
কি লেখক কল "হাস্যকর" হয়।
(কমপক্ষে আমার জন্য) এটি 'কম' সম্পর্কে নয় 'এটি আরও' সম্পর্কে
সুতরাং আমি তাকে বোঝার মতো আমাকে পুনরায় মন্তব্য করতে দাও:
এবং আপনার প্রতিটি পদ্ধতির একমাত্র পদ্ধতির সাথে পরীক্ষা করার চিন্তাভাবনা (1-1 টির সম্পর্কের ক্ষেত্রে এটির নিজস্ব পরীক্ষা পদ্ধতি) হাস্যকর হবে।
আপনার উদ্ধৃতি আবার উদ্ধৃত করতে:
আপনি যখন বুঝতে পারবেন যে এটি সমস্ত আচরণ নির্দিষ্টকরণ এবং পরীক্ষা না লেখার বিষয়ে, তখন আপনার দৃষ্টিভঙ্গি স্থানান্তরিত হয়।
আপনি যখন টিডিডি অনুশীলন করেন তখন আপনি ভাবেন না :
আমার একটি পদ্ধতি রয়েছে calculateX($a, $b);
এবং এর জন্য একটি পরীক্ষা দরকার testCalculcateX
যা পদ্ধতি সম্পর্কে সমস্ত কিছুর পরীক্ষা করে।
টিডিডি আপনাকে যা বলে তা হ'ল আপনার কোডটি কী পছন্দ করবে সে সম্পর্কে চিন্তা করা :
আমার দুটি মানের চেয়ে বড় গণনা করা দরকার ( প্রথম পরীক্ষার কেস! ) তবে $ a যদি শূন্যের চেয়ে ছোট হয় তবে এটির একটি ত্রুটি তৈরি করা উচিত ( দ্বিতীয় পরীক্ষার কেস! ) এবং যদি $ বি শূন্যের চেয়ে ছোট হয় তবে .... ( তৃতীয় পরীক্ষার কেস! ) ইত্যাদি on
আপনি প্রসঙ্গ ছাড়া একক পদ্ধতি নয়, আচরণগুলি পরীক্ষা করতে চান।
এইভাবে আপনি একটি টেস্ট স্যুট পান যা আপনার কোডের জন্য নথিভুক্তি এবং এটি যা করার প্রত্যাশা করে তা অবশ্যই ব্যাখ্যা করে, সম্ভবতঃ কেন :)
আপনি নিজের কোডটির কোন অংশটির জন্য ইউনিট পরীক্ষা তৈরি করবেন তা স্থির করে কীভাবে যাবেন?
সংগ্রহস্থল বা উত্পাদনের কাছাকাছি যে কোনও জায়গায় যা শেষ হয় তার পরীক্ষার দরকার হয়। আমি মনে করি না যে আমি উপরে বর্ণনার চেষ্টা করেছি আপনার উক্তিটির লেখক এর সাথে একমত নন।
আপনার যদি এটির জন্য পরীক্ষা না করে থাকে তবে কোডটি পরিবর্তন করা আরও শক্ততর (আরও ব্যয়বহুল) হয়ে যায়, বিশেষত যদি এটি আপনি পরিবর্তন করেন না।
টিডিডি হ'ল এটি নিশ্চিত করার একটি উপায় যে আপনার কাছে সমস্ত কিছুর জন্য পরীক্ষা রয়েছে তবে যতক্ষণ আপনি পরীক্ষাগুলি ভাল করে লিখেছেন ততক্ষণ তা ঠিক আছে। সাধারণত একই দিনে সেগুলি লেখার ফলে যেহেতু আপনি পরে এটি করতে যাচ্ছেন না, আপনি তাই না? :)
মন্তব্যের প্রতিক্রিয়া:
পদ্ধতিগুলির একটি শালীন পরিমাণ নির্দিষ্ট প্রসঙ্গে পরীক্ষা করা যায় না কারণ তারা হয় নির্ভর করে বা অন্য পদ্ধতির উপর নির্ভরশীল
ঠিক আছে যে তিনটি জিনিস এই পদ্ধতিগুলি কল করতে পারে:
অন্যান্য শ্রেণীর পাবলিক পদ্ধতি
আমরা অন্যান্য ক্লাসগুলি উপহাস করতে পারি তাই আমরা সেখানে রাষ্ট্রের সংজ্ঞা দিয়েছি। আমরা প্রসঙ্গের নিয়ন্ত্রণে থাকি যাতে সেখানে কোনও সমস্যা না হয়।
* সুরক্ষিত বা ব্যক্তিগত পদ্ধতি একই *
কোনও শ্রেণীর পাবলিক এপিআইয়ের অংশ নয় এমন কোনও কিছুই সাধারণত পরীক্ষিত হয় না।
আপনি পরীক্ষা আচরণ এবং বাস্তবায়ন করতে চান এবং যদি একটি বর্গ এক বড় পাবলিক পদ্ধতিতে অথবা যেগুলোর প্রচুর ছোট সংরক্ষিত পদ্ধতি নামক পেতে এবং এটির সমস্ত কাজ করে বাস্তবায়ন । আপনার পরীক্ষাগুলি স্পর্শ না করে আপনি এই সুরক্ষিত পদ্ধতিগুলি পরিবর্তন করতে সক্ষম হতে চান। কারণ আপনার কোডগুলি আচরণের পরিবর্তন হলে আপনার পরীক্ষাগুলি ভঙ্গ হবে! আপনি যখন কিছু ভাঙ্গেন তখন আপনাকে জানাতে আপনার পরীক্ষাগুলি কীসের জন্য রয়েছে তা জানায় :)
একই ক্লাসে পাবলিক পদ্ধতি
এটি প্রায়শই ঘটে না তাই না? এবং যদি এটি নীচের উদাহরণে পছন্দ করে তবে এটি পরিচালনা করার কয়েকটি উপায় রয়েছে:
$stuff = new Stuff();
$stuff->setBla(12);
$stuff->setFoo(14);
$stuff->execute();
সেটটারগুলি উপস্থিত রয়েছে এবং এক্সিকিউট পদ্ধতিটির স্বাক্ষরের অংশ নয় এটি অন্য একটি বিষয়;)
আমরা এখানে যা পরীক্ষা করতে পারি তা হ'ল যদি আমরা ভুল মানগুলি সেট করি তখন কার্যকর হয়। যে setBla
একটি ব্যতিক্রম ছোঁড়ার যখন আপনি পাস একটি স্ট্রিং আলাদাভাবে পরীক্ষা করা সম্ভব কিন্তু আমরা পরীক্ষা করতে চান তাহলে ঐ দুই অনুমতি মান (12 & 14) না না পরীক্ষা ক্ষেত্রে চেয়ে (কারনের জন্য) কাজ একসাথে না।
আপনি যদি একটি "ভাল" টেস্ট স্যুট চান তবে পিএইচপি, সম্ভবত (!) @covers Stuff::execute
আপনি এই পদ্ধতির জন্য কেবল কোড কভারেজ তৈরি করেছেন তা নিশ্চিত করার জন্য একটি টীকা যোগ করতে পারেন এবং কেবল সেটআপ থাকা অন্যান্য স্টাফগুলি পৃথকভাবে পরীক্ষা করা দরকার (আবার, যদি তুমি ওইটা চাও).
সুতরাং বক্তব্যটি হ'ল: সম্ভবত আপনাকে আশেপাশের কয়েকটি বিশ্বের তৈরি করতে হবে তবে আপনার অর্থপূর্ণ পরীক্ষার কেসগুলি লিখতে সক্ষম হওয়া উচিত যা সাধারণত কেবল একটি বা দুটি দুটি বাস্তব ফাংশন ছড়িয়ে দেয় (সেটারগুলি এখানে গণনা করে না)। বাকীটি ইথারকে উপহাস করা যায় বা প্রথমে পরীক্ষা করা যেতে পারে এবং তারপরে নির্ভর করা যায় (দেখুন @depends
)
* দ্রষ্টব্য: প্রশ্নটি এসও থেকে স্থানান্তরিত হয়েছিল এবং প্রাথমিকভাবে পিএইচপি / পিএইচপিউনিট সম্পর্কে ছিল, তবে নমুনা কোড এবং রেফারেন্সগুলি পিএইচপি ওয়ার্ল্ড থেকে আসে কেননা, আমি মনে করি এটি অন্যান্য ভাষার ক্ষেত্রেও প্রযোজ্য কারণ phpunit অন্যান্য xUnit এর চেয়ে আলাদা নয় doesn't পরীক্ষার ফ্রেমওয়ার্ক।