আমার কোডে যদি আমার কোনও ফাংশন থাকে যা এর মতো হয়:
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 টি বাস্তবায়নের জন্য পরীক্ষার কোডটি নকল করব।