Wenn ich eine Funktion in meinem Code habe, die wie folgt aussieht:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Normalerweise würde ich dies umgestalten, um Ploymorphism unter Verwendung einer Fabrikklasse und eines Strategiemusters zu verwenden:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Wenn ich jetzt TDD verwenden würde, hätte ich calculateTax()vor dem Refactoring einige Tests, die mit dem Original funktionieren .
Ex:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
Nach dem Refactoring habe ich eine Factory-Klasse NameHandlerFactoryund mindestens 3 Implementierungen von InameHandler.
Wie soll ich vorgehen, um meine Tests zu überarbeiten? Soll ich den Unit - Test für löschen claculateTax()aus EmployeeTestsund eine Test - Klasse für jede Implementierung schaffen InameHandler?
Soll ich auch die Factory-Klasse testen?
salaryzur FunktioncalculateTax()hinzugefügt. Auf diese Weise werde ich wahrscheinlich den Testcode für die ursprüngliche Funktion und die 3 Implementierungen der Strategieklasse duplizieren.