ถ้าฉันมีฟังก์ชั่นในรหัสของฉันที่จะไป:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
โดยปกติฉันจะ refactor นี้เพื่อใช้ Ploymorphism โดยใช้คลาสโรงงานและรูปแบบกลยุทธ์:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
ตอนนี้ถ้าฉันใช้ TDD ฉันก็จะมีการทดสอบบางอย่างที่ทำงานกับต้นฉบับcalculateTax()
ก่อนที่จะทำการรีแฟคเตอร์
อดีต:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
ฉันจะมีคลาส Factory NameHandlerFactory
และมีการใช้งานอย่างน้อย 3 InameHandler
ครั้ง
ฉันจะทำการทดสอบซ้ำอีกครั้งได้อย่างไร ฉันควรลบการทดสอบหน่วยclaculateTax()
จากEmployeeTests
และสร้างคลาสการทดสอบสำหรับการติดตั้งแต่ละครั้งInameHandler
หรือไม่
ฉันควรทดสอบคลาสของโรงงานด้วยหรือไม่
salary
ไปยังฟังก์ชันcalculateTax()
ถูกเพิ่มเข้ามา ด้วยวิธีนี้ฉันคิดว่าฉันจะทำซ้ำรหัสทดสอบสำหรับฟังก์ชั่นดั้งเดิมและการใช้งาน 3 คลาสกลยุทธ์