Що ви робите, коли пишете тест, і добираєтесь до того, що вам потрібно зробити тестовий пропуск, і ви розумієте, що вам потрібен додатковий фрагмент функціональності, який слід розділити на його власну функцію? Ця нова функція також повинна бути протестована, але цикл 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 , але як бути у випадках, коли такі дані є приватними?