Benim kodda gibi bir işlevi varsa:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Normalde Ploymorphism'i bir fabrika sınıfı ve strateji modeli kullanarak kullanmak için bunu yeniden düzenlerdim:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Şimdi TDD kullanıyor olsaydım, calculateTax()yeniden düzenleme işleminden önce orijinal üzerinde çalışan bazı testlerim olurdu .
örn:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
Yeniden düzenleme işleminden sonra bir Fabrika sınıfına NameHandlerFactoryve en az 3 uygulamasına sahip olacağım InameHandler.
Testlerimi yeniden düzenlemeye nasıl devam etmeliyim? Ben birim testini silmelisiniz claculateTax()gelen EmployeeTestsve her uygulama için bir test sınıfı oluşturmak InameHandler?
Fabrika sınıfını da test etmeli miyim?
salaryişleve ikinci bir girdicalculateTax()eklendi. Bu şekilde özgün fonksiyonun test kodunu ve strateji sınıfının 3 uygulamasını kopyalayacağımı düşünüyorum.