जब आप टेस्ट लिख रहे होते हैं तब आप क्या करते हैं और आप उस बिंदु तक पहुँच जाते हैं जहाँ आपको टेस्ट पास करने की आवश्यकता होती है और आपको यह महसूस होता है कि आपको एक अतिरिक्त कार्यशीलता की आवश्यकता है जिसे अपने कार्य में अलग किया जाना चाहिए? उस नए फ़ंक्शन को भी परीक्षण करने की आवश्यकता है, लेकिन TDD चक्र कहता है कि परीक्षण को विफल करें, इसे पास करें फिर रिफ्लेक्टर। अगर मैं उस कदम पर हूं जहां मैं अपना टेस्ट पास करने की कोशिश कर रहा हूं, तो मुझे ऐसा नहीं करना चाहिए कि मैं नई कार्यक्षमता का परीक्षण करने के लिए एक और असफल परीक्षण शुरू करूं जिसे मुझे लागू करने की आवश्यकता है।
उदाहरण के लिए, मैं एक बिंदु वर्ग लिख रहा हूं जिसमें एक फ़ंक्शन WillCollideWith ( LineSegment ) है :
public class Point {
// Point data and constructor ...
public bool CollidesWithLine(LineSegment lineSegment) {
Vector PointEndOfMovement = new Vector(Position.X + Velocity.X,
Position.Y + Velocity.Y);
LineSegment pointPath = new LineSegment(Position, PointEndOfMovement);
if (lineSegment.Intersects(pointPath)) return true;
return false;
}
}
मैं के लिए एक परीक्षण लिख रहा था CollidesWithLine जब मुझे एहसास हुआ कि मैं एक की आवश्यकता होगी LineSegment.Intersects ( LineSegment ) समारोह। लेकिन, क्या मुझे इस नई कार्यक्षमता को बनाने के लिए अपने परीक्षण चक्र पर जो कुछ भी हो रहा है उसे रोक देना चाहिए? यह "रेड, ग्रीन, रिफ्लेक्टर" सिद्धांत को तोड़ता हुआ प्रतीत होता है।
मैं सिर्फ कोड है कि पता लगाता है कि की lineSegments इंटरसेक्ट अंदर लिखना चाहिए CollidesWithLine समारोह और refactor यह बाद यह काम कर रहा है? यह इस मामले में काम करेगा क्योंकि मैं लाइनसेक्ट से डेटा एक्सेस कर सकता हूं , लेकिन उन मामलों में क्या होगा जहां उस तरह का डेटा निजी है?