코드에 다음과 같은 함수가있는 경우 :
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()
로부터 EmployeeTests
및 각 구현을위한 테스트 클래스를 생성 InameHandler
?
Factory 클래스도 테스트해야합니까?
salary
함수calculateTax()
에 대한 두 번째 입력 이 추가되었습니다. 이렇게하면 원래 기능과 전략 클래스의 3 가지 구현에 대한 테스트 코드를 복제 할 것이라고 생각합니다.