Nếu tôi có một chức năng trong mã của mình như sau:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Thông thường tôi sẽ cấu trúc lại cái này để sử dụng Ploymorphism bằng cách sử dụng một lớp chiến lược và mô hình nhà máy:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Bây giờ nếu tôi đang sử dụng TDD thì tôi sẽ có một số thử nghiệm hoạt động trên bản gốc calculateTax()trước khi tái cấu trúc.
Ví dụ:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
Sau khi tái cấu trúc tôi sẽ có một lớp Factory NameHandlerFactoryvà ít nhất 3 lần thực hiện InameHandler.
Làm thế nào tôi nên tiến hành cấu trúc lại các bài kiểm tra của mình? Tôi có nên xóa bài kiểm tra đơn vị claculateTax()từ EmployeeTestsvà tạo một lớp Kiểm tra cho mỗi lần thực hiện InameHandlerkhông?
Tôi có nên kiểm tra lớp Factory không?
salarycho chức năngcalculateTax()đã được thêm vào. Theo cách này, tôi nghĩ rằng tôi sẽ sao chép mã kiểm tra cho chức năng ban đầu và 3 triển khai của lớp chiến lược.