আমার কোডে যদি আমার কোনও ফাংশন থাকে যা এর মতো হয়:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
সাধারণত আমি কারখানার শ্রেণি এবং কৌশল প্যাটার্ন ব্যবহার করে প্লাইওমর্ফিজম ব্যবহার করতে এটি রিফ্যাক্টর করব:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
এখন আমি যদি টিডিডি ব্যবহার করতাম তবে আমার কিছু পরীক্ষা হবে যা calculateTax()রিফ্যাক্টরিংয়ের আগে মূলতে কাজ করে ।
উদা:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
রিফ্যাক্টরিংয়ের পরে আমার একটি কারখানা ক্লাস NameHandlerFactoryএবং কমপক্ষে 3 টি বাস্তবায়ন হবে InameHandler।
আমি কীভাবে আমার পরীক্ষাগুলি রিফ্যাক্টর করতে পারি? আমি claculateTax()থেকে ইউনিট পরীক্ষা মুছে ফেলা উচিত EmployeeTestsএবং প্রতিটি বাস্তবায়নের জন্য একটি টেস্ট ক্লাস তৈরি করা উচিত InameHandler?
আমারও কি ফ্যাক্টরি ক্লাস পরীক্ষা করা উচিত?
salaryফাংশনে একটি দ্বিতীয় ইনপুটcalculateTax()যুক্ত করা হয়েছিল। এইভাবে আমি মনে করি যে আমি মূল ফাংশন এবং কৌশল শ্রেণীর 3 টি বাস্তবায়নের জন্য পরীক্ষার কোডটি নকল করব।