मेरे पास टीडीडी के साथ विकसित एक गैर-सेवा सेवा वस्तु है। यह एक साधारण कार्य के साथ शुरू हुआ: कतार से किसी ऑब्जेक्ट के लिए, एसिंक्रोनस प्रोसेसिंग के लिए प्रयास करें। तो मैं अपने constructAttempt()
विधि के चारों ओर एक परीक्षण लिखा है:टीडीडी - ब्लैक-बॉक्स में रिफैक्टरिंग?
void constructAttempt() {...}
कई संभव परिदृश्यों ध्यान में रखा जाना करने की जरूरत है कि कर रहे हैं, इसलिए मैं इस विधि के लिए एक दर्जन से अधिक परीक्षण किया है।
तब मैंने इसे लागू करने के लिए वास्तव में आवश्यकतानुसार लागू किया: पूरी कतार स्कैन करें और प्रयासों का एक बैच बनाएं।
public void go() {
for (QueuedItem item : getQueuedItems()) {
constructAttempt(item);
}
}
तो मैं इस go()
विधि के लिए एक नया परीक्षण या दो कहा: तो कोड अधिक की तरह दिखता है।
अंततः मुझे पता चला कि मुझे कुछ प्रीप्रोकैसिंग की आवश्यकता है जो कभी-कभी constructAttempt()
को प्रभावित कर सकता है। अब कोड लग रहा है और अधिक की तरह:
public void go() {
preprocess();
for (QueuedItem item : getQueuedItems()) {
constructAttempt(item);
}
}
मैं अब मुझे क्या करना चाहिए के बारे में कुछ संदेह हो।
क्या मैं constructAttempt()
, preprocess()
और go()
के साथ कोड को स्वतंत्र रूप से परीक्षण कर सकता हूं? हाँ क्यों/क्यों नहीं? मुझे preprocessing और ब्रेक encapsulation के साइड इफेक्ट्स को कवर नहीं करने का जोखिम है।
या क्या मैं अपने पूरे टेस्ट सूट को केवल go()
पर कॉल कर सकता हूं (जो एकमात्र सार्वजनिक विधि है)? हाँ क्यों/क्यों नहीं? इससे परीक्षण थोड़ा और अस्पष्ट हो जाएगा, लेकिन दूसरी तरफ यह सभी संभव इंटरैक्शन को ध्यान में रखेगा। यह वास्तव में केवल सार्वजनिक एपीआई का उपयोग करके ब्लैक-बॉक्स परीक्षण बन जाएगा, जो टीडीडी के अनुरूप नहीं हो सकता है।
यदि आप अपने परीक्षण सूट को केवल go() विधि का परीक्षण करने के लिए दोबारा प्रतिक्रिया देते हैं ... यदि आप पाए गए बग प्रीप्रोसेस() या निर्माण पर हैं तो आप कैसे पहचानेंगे ?? –