当您编写测试并达到需要通过测试并意识到需要附加功能的时候,该怎么做?该新功能也需要进行测试,但是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;
}
}
当我意识到我需要LineSegment.Intersects(LineSegment)函数时,我正在为CollidesWithLine编写测试。但是,我是否应该停止测试周期中的工作以创建此新功能?这似乎违反了“红色,绿色,重构”原则。
我是否应该只编写检测到lineSegments在CollidesWithLine函数内部相交并在工作后对其进行重构的代码?在这种情况下,这是可行的,因为我可以从LineSegment访问数据,但是如果这种数据是私有的,那该怎么办?