คุณจะทำอย่างไรเมื่อคุณเขียนข้อสอบและถึงจุดที่คุณต้องทำแบบทดสอบและคุณรู้ว่าคุณต้องการฟังก์ชั่นเพิ่มเติมที่ควรแยกออกมาเป็นหน้าที่ของตัวเอง? ฟังก์ชั่นใหม่นั้นจำเป็นต้องได้รับการทดสอบเช่นกัน แต่วัฏจักร 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 ( ส่วนของเส้นตรง )ฟังก์ชั่น แต่ฉันควรหยุดสิ่งที่ฉันทำในรอบการทดสอบเพื่อสร้างฟังก์ชันใหม่นี้หรือไม่ นั่นดูเหมือนจะทำลายหลักการ "แดงเขียวเขียวรีแฟคเตอร์"
ฉันควรจะเขียนโค้ดที่ตรวจพบ lineSegments นั้นตัดเข้าไปข้างในฟังก์ชั่นCollidesWithLineแล้ว refactor มันหลังจากมันทำงานได้หรือไม่ ที่จะทำงานในกรณีนี้เนื่องจากฉันสามารถเข้าถึงข้อมูลจากLineSegmentแต่สิ่งที่เกี่ยวกับในกรณีที่ข้อมูลประเภทนั้นเป็นส่วนตัว?