Cosa fai quando scrivi un test e arrivi al punto in cui devi superare il test e ti rendi conto che hai bisogno di un ulteriore pezzo di funzionalità che dovrebbe essere separato nella sua stessa funzione? Anche quella nuova funzione deve essere testata, ma il ciclo TDD dice di fare fallire un test, farlo passare poi refactor. Se mi trovo sul gradino in cui sto provando a superare il test, non dovrei partire e iniziare un altro test fallito 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 mi sono reso conto 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à? Ciò sembra infrangere il principio "Rosso, Verde, Rifattore".
Devo solo scrivere il codice che rileva quella lineaSegments Intersect all'interno della funzione CollidesWithLine e rifattorarla dopo che funziona? Funzionerebbe in questo caso dal momento che posso accedere ai dati da LineSegment , ma che dire nei casi in cui quel tipo di dati è privato?