如果我的代码中有一个像这样的函数:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
通常,我会使用工厂类和策略模式将其重构为使用多态性:
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()
从中删除单元测试,EmployeeTests
并为的每个实现创建一个Test类InameHandler
吗?
我也应该测试工厂课程吗?
salary
,向该函数calculateTax()
添加了第二个输入。这样,我想我将为原始功能和策略类的3个实现复制测试代码。