Se ho una funzione nel mio codice che va come:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Normalmente mi rifatterò per usare il ploymorphism usando un modello di classe e strategia di fabbrica:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Ora, se stavo usando TDD, avrei alcuni test che funzionano sull'originale calculateTax()
prima del refactoring.
ex:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
Dopo il refactoring avrò una classe Factory NameHandlerFactory
e almeno 3 implementazione di InameHandler
.
Come devo procedere al refactoring dei miei test? Devo eliminare il test unitario per claculateTax()
da EmployeeTests
e creare una classe di test per ogni implementazione di InameHandler
?
Devo testare anche la classe Factory?