Que faites-vous lorsque vous écrivez un test et que vous arrivez au point où vous devez réussir le test et que vous vous rendez compte que vous avez besoin d'une fonctionnalité supplémentaire qui devrait être séparée en sa propre fonction? Cette nouvelle fonction doit également être testée, mais le cycle TDD dit de faire échouer un test, le faire passer puis le refactoriser. Si je suis à l'étape où j'essaie de réussir mon test, je ne suis pas censé partir et commencer un autre test qui échoue pour tester la nouvelle fonctionnalité que j'ai besoin d'implémenter.
Par exemple, j'écris une classe de points qui a une fonction 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;
}
}
J'écrivais un test pour CollidesWithLine quand j'ai réalisé que j'aurais besoin d'une fonction LineSegment.Intersects ( LineSegment ) . Mais, dois-je simplement arrêter ce que je fais pendant mon cycle de test pour aller créer cette nouvelle fonctionnalité? Cela semble briser le principe "Rouge, Vert, Refactor".
Dois-je simplement écrire le code qui détecte cette intersection lineSegments à l'intérieur de la fonction CollidesWithLine et la refactoriser après qu'elle fonctionne? Cela fonctionnerait dans ce cas puisque je peux accéder aux données de LineSegment , mais qu'en est-il dans les cas où ce type de données est privé?