এটি একটি বৈধ পরীক্ষা (যদিও অত্যধিক মাত্রায় alousর্ষান্বিত) এবং আমি কখনও কখনও এটি নির্মাণকারীর যুক্তি পরীক্ষা করার জন্য করি, তবে লাইভ মন্তব্যগুলিতে উল্লেখ করেছেন যেমন আপনাকে নিজেরাই জিজ্ঞাসা করা উচিত।
যদি আপনার কনস্ট্রাক্টর এর মত দেখাচ্ছে:
public Person(Guid guid, DateTime dob)
{
this.Guid = guid;
this.Dob = dob;
}
এটি ছোঁড়ে কিনা তা পরীক্ষা করার অনেকগুলি পয়েন্ট আছে? প্যারামিটারগুলি সঠিকভাবে নির্ধারিত হয়েছে কিনা তা আমি বুঝতে পারি তবে আপনার পরীক্ষাটি বরং ওভারকিল।
তবে, যদি আপনার পরীক্ষাটি এরকম কিছু করে:
public Person(Guid guid, DateTime dob)
{
if(guid == default(Guid)) throw new ArgumentException("Guid is invalid");
if(dob == default(DateTime)) throw new ArgumentException("Dob is invalid");
this.Guid = guid;
this.Dob = dob;
}
তারপরে আপনার পরীক্ষাটি আরও প্রাসঙ্গিক হয়ে ওঠে (আপনি প্রকৃতপক্ষে কোডের কোনও ব্যতিক্রম ছুঁড়ে মারছেন)
একটি জিনিস আমি বলব, সাধারণত আপনার নির্মাণকারীর অনেক যুক্তি থাকা খারাপ অভ্যাস। বেসিক বৈধতা (নাল / ডিফল্ট চেকগুলির মতো আমি উপরে যা করছি) ঠিক আছে। আপনি যদি ডাটাবেসে সংযোগ স্থাপন করছেন এবং কারও ডেটা লোড করছেন তবে কোডটি সত্যই গন্ধ পেতে শুরু করে ...
এ কারণে, যদি আপনার নির্মাণকারী পরীক্ষার উপযুক্ত হয় (কারণ প্রচুর যুক্তি দিয়ে চলেছে) তবে অন্য কিছু হতে পারে।
আপনি প্রায় অবশ্যই ব্যবসায়িক লজিক স্তর, নির্মাণকারী এবং ভেরিয়েবল অ্যাসাইনমেন্টে এই শ্রেণীর অন্তর্ভুক্ত অন্যান্য পরীক্ষা করতে যাচ্ছেন অবশ্যই এই পরীক্ষাগুলি থেকে সম্পূর্ণ কভারেজ পেতে চলেছে। সুতরাং এটি সম্ভবত নির্মাতার জন্য নির্দিষ্ট পরীক্ষা যুক্ত করা অর্থহীন। যাইহোক, কিছুই কালো এবং সাদা নয় এবং যদি এই পরীক্ষাগুলি পর্যালোচনা করার কোডই থাকত তবে আমার কাছে এগুলির বিরুদ্ধে কিছু ছিল না - তবে আমি প্রশ্ন করব যে তারা আপনার সমাধানের অন্য কোথাও পরীক্ষার ওপরে এবং এর বাইরে অনেক বেশি মূল্য যুক্ত করবে কিনা I'd
আপনার উদাহরণে:
public Person(Id id, DateTime dateOfBirth) :
base(id)
{
if (dateOfBirth == null)
throw new ArgumentNullException("Date of Birth");
elseif (dateOfBith < new DateTime(1900,01,01)
throw new ArgumentException("Date of Birth");
DateOfBirth = dateOfBirth;
}
আপনি কেবল বৈধতা দিচ্ছেন না, তবে আপনি বেস কনস্ট্রাক্টরকেও কল করছেন। আমার জন্য এটি এই পরীক্ষাগুলিগুলির আরও কারণ দেখায় কারণ তাদের কাছে কনস্ট্রাক্টর / বৈধতা যুক্তি এখন দুটি শ্রেণিতে বিভক্ত যা দৃশ্যমানতা হ্রাস করে এবং অপ্রত্যাশিত পরিবর্তনের ঝুঁকি বাড়ায়।
TLDR
এই পরীক্ষাগুলির কিছু মূল্য রয়েছে তবে বৈধতা / অ্যাসাইনমেন্ট যুক্তি আপনার সমাধানের অন্যান্য পরীক্ষাগুলির দ্বারা আচ্ছাদিত হতে পারে। এই কনস্ট্রাক্টরগুলিতে যদি প্রচুর যুক্তিযুক্ত থাকে যার জন্য উল্লেখযোগ্য পরীক্ষার প্রয়োজন হয় তবে এটি আমার কাছে পরামর্শ দেয় যে সেখানে একটি বাজে কোড গন্ধ রয়েছে।