[編集]: 適切なサイトの質問については、ここをクリックしてください。
テストを書いていて、テストに合格する必要があるところまで来て、独自の機能に分離する必要がある追加の機能が必要であることに気付いたとき、あなたはどうしますか? その新しい関数もテストする必要がありますが、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からデータにアクセスできるのでうまくいきますが、そのようなデータが非公開の場合はどうでしょうか?