Jika saya memiliki fungsi dalam kode saya seperti:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
Biasanya saya akan menolak ini untuk menggunakan Ploymorphism menggunakan kelas pabrik dan pola strategi:
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
Sekarang jika saya menggunakan TDD maka saya akan memiliki beberapa tes yang berfungsi pada aslinya calculateTax()
sebelum refactoring.
ex:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
Setelah refactoring saya akan memiliki kelas Pabrik NameHandlerFactory
dan setidaknya 3 implementasi InameHandler
.
Bagaimana saya harus melanjutkan untuk memperbaiki tes saya? Haruskah saya menghapus unit test claculateTax()
dari EmployeeTests
dan membuat kelas Test untuk setiap implementasi InameHandler
?
Haruskah saya menguji kelas Pabrik juga?
salary
ke fungsicalculateTax()
telah ditambahkan. Dengan cara ini saya pikir saya akan menduplikasi kode tes untuk fungsi asli dan 3 implementasi dari kelas strategi.