Bạn sẽ làm gì khi bạn đang viết một bài kiểm tra và bạn đạt đến điểm cần thực hiện bài kiểm tra và bạn nhận ra rằng bạn cần một phần chức năng bổ sung cần được tách thành chức năng của chính nó? Chức năng mới đó cũng cần phải được kiểm tra, nhưng chu trình TDD nói rằng làm cho một thử nghiệm thất bại, làm cho nó vượt qua sau đó tái cấu trúc. Nếu tôi đang ở bước mà tôi đang cố gắng vượt qua bài kiểm tra của mình, tôi không cần phải tắt và bắt đầu một bài kiểm tra thất bại khác để kiểm tra chức năng mới mà tôi cần thực hiện.
Ví dụ: tôi đang viết một lớp điểm có chức năng 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;
}
}
Tôi đã viết một bài kiểm tra cho CollidesWithLine khi tôi nhận ra rằng tôi sẽ cần một hàm LineSegment.Intersects ( LineSegment ) . Nhưng, tôi có nên dừng những gì tôi đang làm trong chu kỳ thử nghiệm của mình để tạo ra chức năng mới này không? Điều đó dường như phá vỡ nguyên tắc "Đỏ, Xanh lục, Tái cấu trúc".
Tôi có nên chỉ cần viết mã mà phát hiện rằng lineSegments Intersect bên trong CollidesWithLine chức năng và cấu trúc lại nó sau khi nó đang làm việc? Điều đó sẽ hoạt động trong trường hợp này vì tôi có thể truy cập dữ liệu từ LineSegment , nhưng trong trường hợp loại dữ liệu đó là riêng tư thì sao?