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 NameHandlerFactory
và í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ừ EmployeeTests
và tạo một lớp Kiểm tra cho mỗi lần thực hiện InameHandler
không?
Tôi có nên kiểm tra lớp Factory không?
salary
cho 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.