সংক্ষিপ্ত উত্তর হলো 'না". আরও আকর্ষণীয় অংশ হ'ল কেন / কীভাবে এই পরিস্থিতি তৈরি হতে পারে।
আমি মনে করি যে বিভ্রান্তি সৃষ্টি হচ্ছে কারণ আপনি কোডের জন্য কঠোর পরীক্ষার অনুশীলনগুলি (ইউনিট টেস্ট বনাম ইন্টিগ্রেশন টেস্ট, মশকরা ইত্যাদি) মেনে চলার চেষ্টা করছেন যা কঠোর অনুশীলনের সাথে মিলিত হয় না বলে মনে হয়।
কোডটি "ভুল" বলে বা এটি নির্দিষ্ট অনুশীলনগুলি অন্যের চেয়ে ভাল বলে মনে হয় না। কেবলমাত্র যে পরীক্ষার অনুশীলনগুলি দ্বারা তৈরি কিছু অনুমান এই পরিস্থিতিতে প্রয়োগ নাও হতে পারে এবং কোডিং অনুশীলন এবং পরীক্ষার অভ্যাসগুলিতে অনুরূপ স্তরের "কঠোরতা" ব্যবহার করতে সহায়তা করতে পারে; বা কমপক্ষে, তারা ভারসাম্যহীন হতে পারে তা স্বীকার করার জন্য, যার ফলে কিছু দিক অনুপযুক্ত বা অপ্রয়োজনীয় হতে পারে।
সর্বাধিক সুস্পষ্ট কারণ হ'ল আপনার ফাংশন দুটি পৃথক কার্য সম্পাদন করছে:
Personতাদের নামের উপর ভিত্তি করে সন্ধান করছি । Personসম্ভবত এটি অন্য কোথাও তৈরি / সঞ্চিত বস্তুগুলি খুঁজে পেতে পারে তা নিশ্চিত করার জন্য এটি একীকরণ পরীক্ষার প্রয়োজন ।
Personতাদের লিঙ্গের উপর ভিত্তি করে যথেষ্ট বয়স্ক কিনা তা গণনা করা হচ্ছে। প্রত্যাশা অনুযায়ী গণনা সম্পাদন করে কিনা তা নিশ্চিত করার জন্য এটির ইউনিট পরীক্ষার প্রয়োজন।
এই টাস্কগুলিকে কোডের একটি ব্লকে একত্রে গোষ্ঠীভুক্ত করে, আপনি অন্যটি ব্যতীত কোনওটি চালাতে পারবেন না। যখন আপনি গণনাগুলি পরীক্ষা করতে চান, আপনাকে একটি সন্ধান করতে বাধ্য করা Personহয় (হয় আসল ডাটাবেস থেকে বা স্টাব / উপহাস থেকে)। আপনি যখন পরীক্ষা করতে চান যে অনুসন্ধানটি সিস্টেমের বাকি অংশের সাথে সংহত করে, তখন আপনাকে বয়স সম্পর্কে একটি গণনাও করতে বাধ্য করা হয়। আমাদের সেই গণনাটি কী করা উচিত? আমাদের এটিকে উপেক্ষা করা উচিত, না এটি পরীক্ষা করা উচিত? এটি আপনার প্রশ্নে বর্ণিত হুবহু অবস্থা বলে মনে হচ্ছে।
আমরা যদি বিকল্পটি কল্পনা করি তবে আমাদের নিজস্ব গণনা থাকতে পারে:
def is_old_enough?(person)
if person.male?
return person.age > 21
else
return person.age > 18
end
end
যেহেতু এটি খাঁটি গণনা, আমাদের এটিতে সংহতকরণ পরীক্ষা করার দরকার নেই।
আমরা আলাদাভাবে লুকিং টাস্কটি লেখার জন্যও প্রলুব্ধ হতে পারি:
def person_from_name(name = 'filip')
return Person::API.new(name)
end
যাইহোক, এই ক্ষেত্রে কার্যকারিতা এত কাছাকাছি Person::API.new যে আমি বলব যে আপনি এটির পরিবর্তে ব্যবহার করা উচিত (যদি ডিফল্ট নামটি প্রয়োজন হয় তবে এটি আরও ভাল কোনও শ্রেণীর বৈশিষ্ট্যের মতো সংরক্ষণ করা যেতে পারে?)।
Person::API.new(বা person_from_name) এর জন্য ইন্টিগ্রেশন টেস্টগুলি লেখার সময় আপনার প্রত্যাশাগুলি ফিরে পাওয়া কিনা তা বিবেচনা করা উচিত Person; বয়সের ভিত্তিক সমস্ত গণনা অন্য কোথাও যত্ন নেওয়া হয়, যাতে আপনার সংহতকরণ পরীক্ষাগুলি এটিকে উপেক্ষা করতে পারে।