¿Qué haces cuando escribes una prueba y llegas al punto en que necesitas pasar la prueba y te das cuenta de que necesitas una pieza adicional de funcionalidad que debería separarse en su propia función? Esa nueva función también necesita ser probada, pero el ciclo TDD dice: Hacer que una prueba falle, hacerla pasar y luego refactorizarla. Si estoy en el paso donde estoy tratando de hacer que mi prueba pase, se supone que no debo salir y comenzar otra prueba fallida para probar la nueva funcionalidad que necesito implementar.
Por ejemplo, estoy escribiendo una clase de puntos que tiene una función 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;
}
}
Estaba escribiendo una prueba para CollidesWithLine cuando me di cuenta de que necesitaría una función LineSegment.Intersects ( LineSegment ) . Pero, ¿debería dejar de hacer lo que estoy haciendo en mi ciclo de prueba para crear esta nueva funcionalidad? Eso parece romper el principio de "Rojo, Verde, Refactor".
¿Debo escribir el código que detecta que LineSegments Intersect dentro de la función CollidesWithLine y refactorizarlo después de que esté funcionando? Eso funcionaría en este caso ya que puedo acceder a los datos de LineSegment , pero ¿qué pasa en los casos en que ese tipo de datos es privado?
fuente