Existe-t-il des applications open source développées à l'aide d'un développement piloté par les tests qui servent de modèles de fonctionnement des tests unitaires?
Je préfère voir des exemples en C # et .NET. (Notez que j'ai mentionné des applications, pas seulement des bibliothèques.)
Je suis un programmeur de niveau intermédiaire qui veut vraiment croire et pratiquer le TDD. L'application sur laquelle je travaille dans mon travail de jour est assez compliquée - environ 1 million de lignes de code - et j'aimerais introduire plus de tests unitaires. Nous avons quelques tests unitaires en place, mais mes efforts à TDD et à travailler sur du code qui est déjà en cours de test n'ont pas été encourageants.
Dans mon expérience certes limitée, TDD semble encourager une grande complexité au nom du découplage. Les bits de l'application qui sont difficiles à tester - et qui ont tendance à être critiques par coïncidence - sont poussés vers la périphérie, dans le domaine des tests d'intégration qui peuvent ou non être écrits. (Je pense aux suspects habituels ici, à l'accès au système de fichiers, à l'hydratation des objets d'une base de données, aux appels Web asynchrones, etc.)
Le code en cours de test a tendance à impliquer beaucoup de collaboration entre les objets, et peut-être une logique de flux simple, qui se produit tous en mémoire et qui pourrait sans doute être écrite d'une manière plus simple et plus compréhensible si tout n'avait pas à être totalement découplé pour tester.
Je comprends les techniques de moquerie des dépendances et autres, mais d'après mon expérience, une utilisation intensive de la moquerie conduit à des tests très fragiles. Si mon premier instinct en voyant un tas de tests devenir rouge est: "Génial, maintenant je dois réparer toutes les moqueries", alors mes tests sont devenus une traînée plutôt qu'un filet de sécurité.
J'essaie de dépasser cette barrière mentale, et dans le cadre de cela, je lis le livre de Michael Feathers, Working Effectively with Legacy Code . J'espère qu'il me montrera une partie de ce qui me manque.
J'aimerais également étudier certaines applications .NET non triviales avec une bonne couverture de code, peut-être un système de gestion de contenu ou une application CRUD. Je vais probablement examiner le cadre de test FitNesse dont Oncle Bob parle, mais ce serait bien de voir quelque chose écrit dans la langue que je connais le mieux.
Toutes suggestions ou paroles de sagesse seraient appréciées.
la source
Réponses:
Je ne sais pas si TDD a été utilisé, mais un excellent exemple de test est sqlite qui a une couverture de branche 100% remarquable et a plus de 1000 fois plus de code de test et de scripts que le code produit.
la source
Le projet Orchard pourrait être ce que vous recherchez. C'est une application .NET / MVC / TDD qui est assez complexe, mais pas trop mal et qui démontre quelques bonnes pratiques et modèles ..
http://orchard.codeplex.com/wikipage?title=solution
et je suppose que le lien mis à jour:
http://docs.orchardproject.net/
la source
De nombreuses bibliothèques open source tierces sont TDDed. Les bibliothèques de Rhinos en veille prolongée, telles que RhinoMocks et NHibernate, sont TDD par leurs développeurs utilisant XUnit comme cadre de test unitaire.
Maintenant, avec OSS, vous ne pouvez généralement pas garantir que TOUT dans le produit a été TDD. La communauté peut avoir des normes, y compris cette pratique, et elle peut même utiliser un build-bot qui effectue des mesures de couverture de code, mais TDD est une mentalité qui doit être acquise par le développeur, et avec le grand public capable de s'engager à ouvrir- les troncs VCS source comme ceux sur GitHub, n'importe qui peut commettre n'importe quel changement avec n'importe quelle quantité de couverture de test (ou si la couverture est requise, les tests auraient pu être écrits après coup, ce qui est une violation de l'esprit de TDD mais il n'y en a vraiment pas un bon moyen de l'attraper lors de la validation).
la source