Что вы делаете, когда пишете тест, и вы попадаете в точку, где вам нужно пройти тест, и вы понимаете, что вам нужен дополнительный фрагмент функциональности, который должен быть разделен на его собственную функцию? Эта новая функция также должна быть протестирована, но цикл 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 ( LineSegment ) . Но должен ли я просто остановить то, что я делаю в моем цикле испытаний, чтобы создать новую функциональность? Кажется, это нарушает принцип «красный, зеленый, рефакторинг».
Должен ли я просто написать код, который обнаруживает, что lineSegments Intersect внутри функции CollidesWithLine и рефакторинг его после того, как он работает? Это сработало бы в этом случае, так как я могу получить доступ к данным из LineSegment , но что делать в случаях, когда такие данные являются частными?