Je viens de commencer à TDD et j'ai très vite couru dans un mur de briques. Voici mon scénario ... J'essaie de modéliser un objet image, et en passant par les étapes TDD j'ai commencé avec un objet simple qui finalement a grandi dans ...Gérer les problèmes de mise en œuvre dans TDD
public class ImageObject
{
public string Name {get; set;}
public int Width {get; set;}
public int Height {get; set;}
public bool IsValid()
{
//Some rules
}
}
Bien sûr, les essais obligatoires ...
[Test]
public void ImageWidthCannotBeLessThanZero {...}
[Test]
public void ImageHeightCannotBeLessThanZero {...}
and so forth...
Jusqu'ici tout va bien. Ensuite, je veux représenter le fichier physique dans la classe en quelque sorte. Il pourrait être un chemin de fichier
public class ImageObject
{
public string Path {get; set;}
}
ou une série d'octets
public class ImageObject
{
public byte[] Bytes {get; set;}
}
(S'il vous plaît ce n'est pas un argument à propos de DB vs système de fichiers pour le stockage.)
A ce stade, je Je ne me sens pas à l'aise parce que mon esprit est en train de dériver et de commencer à penser aux détails de l'infrastructure/de la mise en œuvre. Où est mon défaut ?? Devrais-je prendre la décision à l'avance sur les détails de mise en œuvre? Ai-je besoin d'un motif de conception intelligent pour faire face à cela? Un cadre moqueur pourrait-il aider? C'est un problème d'analyse/conception d'objet et je devrais utiliser des outils UML? (Attendez une minute je pensais que TDD était sur le design?)
De toute façon comment puis-je surmonter ce problème? Je veux rester concentré sur la conception de mes objets et ne pas penser aux problèmes d'infrastructure en ce moment?
Voulez-vous dire que je ne devrais pas me soucier du fichier physique en ce moment? Et à la place je devrais m'inquiéter à ce sujet quand je commence à concevoir le consommateur de l'ImageObject? – Fixer
Vous pouvez commencer à y penser maintenant, je dis simplement en termes de TDD, faites-le en fonction du comportement. Comme dans mon exemple, si vous avez besoin des octets de l'image, vous pouvez avoir une méthode GetBytes() au lieu de permettre un accès direct à la représentation physique. Ensuite, vous pourriez écrire des tests pour GetBytes(), et l'implémenter comme vous le vouliez physiquement. Vous pouvez vous en soucier ou non à ce stade de développement. –
@Fixer - Les tests unitaires sont des consommateurs de 'ImageObject' – Gutzofter