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 NameHandlerFactory
und 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 EmployeeTests
und eine Test - Klasse für jede Implementierung schaffen InameHandler
?
Soll ich auch die Factory-Klasse testen?
salary
zur FunktioncalculateTax()
hinzugefügt. Auf diese Weise werde ich wahrscheinlich den Testcode für die ursprüngliche Funktion und die 3 Implementierungen der Strategieklasse duplizieren.