अगर मेरे कोड में एक फंक्शन है जो इस प्रकार है:
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);
}
अब अगर मैं टीडीडी का उपयोग कर रहा था तो मेरे पास कुछ परीक्षण होंगे जो कि calculateTax()रिफैक्टरिंग से पहले मूल पर काम करते हैं ।
उदाहरण के लिए:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
रिफैक्टरिंग के बाद, मेरे पास एक फैक्ट्री क्लास NameHandlerFactoryऔर कम से कम 3 का कार्यान्वयन होगा InameHandler।
मुझे अपने परीक्षणों को वापस करने के लिए कैसे आगे बढ़ना चाहिए? मैं के लिए इकाई परीक्षण को नष्ट करना चाहिए claculateTax()से EmployeeTestsऔर में से प्रत्येक के कार्यान्वयन के लिए एक टेस्ट वर्ग बनाने InameHandler?
क्या मुझे फैक्टरी क्लास का भी परीक्षण करना चाहिए?
salaryफ़ंक्शन के लिए एक दूसरा इनपुटcalculateTax()जोड़ा गया था। इस तरह से मुझे लगता है कि मैं मूल फ़ंक्शन और रणनीति वर्ग के 3 कार्यान्वयन के लिए परीक्षण कोड की नकल कर रहा हूं।