Если у меня есть функция в моем коде, которая выглядит следующим образом:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Обычно я реорганизовал бы это, чтобы использовать Ploymorphism, используя фабричный класс и шаблон стратегии:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Теперь, если бы я использовал TDD, у меня были бы некоторые тесты, которые работали бы с оригиналом calculateTax()
перед рефакторингом.
например:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
После рефакторинга у меня будет класс Factory NameHandlerFactory
и как минимум 3 реализации InameHandler
.
Как мне провести рефакторинг моих тестов? Должен ли я удалить модульный тест для claculateTax()
from EmployeeTests
и создать класс Test для каждой реализации InameHandler
?
Должен ли я также проверить класс Factory?
salary
в функциюcalculateTax()
был добавлен. Таким образом, я думаю, я буду дублировать тестовый код для исходной функции и трех реализаций класса стратегии.