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 NameHandlerFactory
ve en az 3 uygulamasına sahip olacağım InameHandler
.
Testlerimi yeniden düzenlemeye nasıl devam etmeliyim? Ben birim testini silmelisiniz claculateTax()
gelen EmployeeTests
ve her uygulama için bir test sınıfı oluşturmak InameHandler
?
Fabrika sınıfını da test etmeli miyim?
salary
iş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.