J'essaie de comprendre TDD, en particulier la partie développement. J'ai consulté des livres, mais ceux que j'ai trouvés abordent principalement la partie relative aux tests: l'histoire de NUnit, pourquoi les tests sont bons, Red / Green / Refactor et la création d'un calculateur de cordes.
Bien, mais c'est "juste" des tests unitaires, pas TDD. Plus précisément, je ne comprends pas comment TDD m'aide à obtenir une bonne conception si j'ai besoin d'une conception pour commencer à la tester.
Pour illustrer, imaginez ces 3 exigences:
- Un catalogue doit avoir une liste de produits
- Le catalogue doit rappeler quels produits un utilisateur a vus
- Les utilisateurs devraient pouvoir rechercher un produit
À ce stade, de nombreux livres tirent un lapin magique d'un chapeau et se plongent simplement dans «Test du produit», mais ils n'expliquent pas comment ils en sont venus à la conclusion qu'il existe un produit «ProductService». C’est la partie "Développement" de TDD que j’essaie de comprendre.
Il doit exister une conception existante, mais des éléments extérieurs aux services de l'entité (c'est-à-dire: il existe un produit, il doit donc exister un produitService) sont introuvables. Par exemple, la deuxième condition nécessite que Utilisateur, mais où puis-je mettre la fonctionnalité à rappeler? Et la fonction de recherche est-elle une fonctionnalité de ProductService ou un service de recherche distinct? Comment saurais-je lequel je devrais choisir?)
Selon SOLID , il me faudrait un UserService, mais si je conçois un système sans TDD, je risque de me retrouver avec toute une panoplie de services à méthode unique. Le TDD n’a-t-il pas pour but de me faire découvrir mon design?
Je suis un développeur .net, mais les ressources Java pourraient également fonctionner. Je pense qu'il ne semble pas exister de véritable exemple d'application ou de livre traitant d'une application métier réelle. Quelqu'un peut-il fournir un exemple clair illustrant le processus de création d'une conception à l'aide de TDD?