Che cosa fai quando stai scrivendo un test e arrivi al punto in cui devi passare il test e ti rendi conto che hai bisogno di un ulteriore elemento di funzionalità che dovrebbe essere separato nella sua funzione? Anche questa nuova funzione deve essere testata, ma il ciclo TDD dice di fare fallire un test, farlo passare poi refactoring. Se sono sul punto in cui sto cercando di fare passare il test, non dovrei andare a dare il via a un altro test in errore per testare la nuova funzionalità che devo implementare.
Ad esempio, sto scrivendo una classe di punti che ha una funzione 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;
}
}
Stavo scrivendo un test per CollidesWithLine quando ho capito che avrei bisogno di una funzione LineSegment.Intersects ( LineSegment ) . Ma dovrei semplicemente interrompere ciò che sto facendo nel mio ciclo di test per creare questa nuova funzionalità? Questo sembra infrangere il principio "Red, Green, Refactor".
Devo solo scrivere il codice che rileva che lineSegments Intersect si trova all'interno della funzione CollidesWithLine e rifattalo dopo che ha funzionato? Funzionerebbe in questo caso poiché posso accedere ai dati da LineSegment , ma nei casi in cui quel tipo di dati è privato?