Co robisz, gdy piszesz test i dochodzisz do punktu, w którym musisz zdać test, i zdajesz sobie sprawę, że potrzebujesz dodatkowej funkcjonalności, która powinna być podzielona na własną funkcję? Ta nowa funkcja również musi zostać przetestowana, ale cykl TDD mówi: „Nie udać się testem, sprawić, by przeszedł, a następnie refaktoryzować”. Jeśli jestem na etapie, w którym próbuję zdać test, nie powinienem zaczynać i uruchamiać kolejnego testu zakończonego niepowodzeniem w celu przetestowania nowej funkcjonalności, którą muszę zaimplementować.
Na przykład piszę klasę punktową, która ma funkcję 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;
}
}
Pisałem test dla CollidesWithLine, kiedy zdałem sobie sprawę, że potrzebuję funkcji LineSegment.Intersects ( LineSegment ) . Ale czy powinienem po prostu przerwać to, co robię w cyklu testowym, aby stworzyć nową funkcjonalność? To wydaje się łamać zasadę „czerwony, zielony, refaktor”.
Czy powinienem po prostu napisać kod, który wykrywa, że lineSegments przecinają się wewnątrz funkcji CollidesWithLine i refaktoryzują go po jego zadziałaniu ? To by działało w tym przypadku, ponieważ mogę uzyskać dostęp do danych z LineSegment , ale co z przypadkami, w których tego rodzaju dane są prywatne?