[编辑]: 单击此处在相应网站上查看问题。
当你正在编写一个测试并且你需要通过测试并且你意识到你需要一个额外的功能应该被分离到它自己的功能中时,你会怎么做?这个新功能也需要测试,但是 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编写测试。但是,我是否应该停止我在测试周期中正在做的事情来创建这个新功能?这似乎打破了“红、绿、重构”的原则。
我是否应该在CollidesWithLine函数内部编写检测 lineSegments Intersect 的代码并在它工作后对其进行重构?这在这种情况下会起作用,因为我可以从LineSegment访问数据,但是在这种数据是私有的情况下呢?