Je crois fermement en utilisant des tests unitaires dans le cadre de la construction de grandes applications multiplateformes. Nous planifions actuellement d'effectuer nos tests unitaires dans le cadre d'un projet distinct. Cela a l'avantage de garder notre base de code propre. Je pense, cependant, que cela séparerait le code de test de la mise en œuvre de l'unité. Que pensez-vous de cette approche et existe-t-il des outils comme JUnit pour les applications C++?Comment implémenter des tests unitaires dans des projets C++ à grande échelle?
Répondre
Il y a beaucoup de frameforks de l'unité de test pour C++. CppUnit n'est certainement pas celui que je choisirais (au moins dans sa version stable 1.x, car il manque de nombreux tests, et nécessite beaucoup de lignes de codes redondantes). Jusqu'à présent, mon cadre préféré est CxxTest, et je prévois d'évaluer Fructose un jour.
De toute façon, il y a quelques "papiers" qui évaluent les cadres C++ TU:
Contrairement à JUnit, et un meilleur ajustement à C++: [CATCH] (https://github.com/philsquared/Catch) –
C'est une approche raisonnable.
J'ai eu de très bons résultats à la fois avec UnitTest++ et Boost.Test
Je l'ai regardé CppUnit, mais pour moi, il se sentait plus comme une traduction de la substance JUnit que quelque chose visant à C++.
Mise à jour: Ces jours je préfère utiliser Catch. Je l'ai trouvé efficace et simple à utiliser.
[doctest] (https://github.com/onqtam/doctest) est ma réimplémentation de Attrapez-vous en mettant l'accent sur la vitesse de compilation - allez sur la [FAQ] (https://github.com/onqtam/doctest/blob/master/doc/markdown/faq.md#how-is-doctest-different-from-catch) pour voir à quel point ils sont différents – onqtam
CppUnit est un équivalent direct de Junit C applications de http://cppunit.sourceforge.net/cppunit-wiki
part, je créé les tests unitaires dans un autre projet, et créé une configuration de construction séparée qui construit l'ensemble des tests unitaires et le code source dépendante. Dans certains cas, je voulais tester les fonctions membres privées d'une classe, j'ai donc fait de la classe Test une classe d'amis pour l'objet à tester, mais j'ai caché les déclarations d'amis lors de la construction de configurations "non test" à travers les déclarations du préprocesseur. J'ai fini par faire ces exercices de codage alors que j'intégrais les tests dans le code existant. Si vous commencez avec des tests unitaires, une meilleure conception peut être simple.
Vous pouvez créer un projet de test unitaire pour chaque bibliothèque de votre arborescence source dans un sous-répertoire de cette bibliothèque. Vous vous retrouvez avec une application de pilote de test pour chaque bibliothèque, ce qui facilite l'exécution d'une seule suite de tests. En les mettant dans un sous-répertoire, il maintient votre base de code propre, mais maintient également les tests proches du code.
Il est facile d'écrire des scripts pour exécuter toutes les suites de tests dans votre arborescence source et collecter les résultats.
J'ai utilisé une version personnalisée de l'original CppUnit pendant des années avec beaucoup de succès, mais il existe d'autres alternatives maintenant. GoogleTest semble intéressant.
Je pense que vous êtes sur la bonne voie avec des tests unitaires et c'est un excellent plan pour améliorer la fiabilité de votre produit.
Bien que les tests unitaires ne résolvent pas tous vos problèmes lors de la conversion de votre application sur différentes plates-formes ou même sur différents systèmes d'exploitation. La raison en est que les tests de l'unité de traitement permettent de découvrir des bogues dans votre application. Il jette tout simplement autant d'entrées imaginables dans votre système et attend un résultat à l'autre extrémité. C'est comme si un singe frappait constamment au clavier et observait les résultats (bêta-testeurs).
Pour passer à l'étape suivante, avec de bons tests unitaires, vous devez vous concentrer sur la conception interne de votre application. La meilleure approche que j'ai trouvée consistait à utiliser un modèle de conception ou un processus de conception appelé «programmation par contrat» ou «conception par contrat». L'autre livre qui est très utile pour construire la fiabilité dans votre conception de base était.
Débogage du processus de développement: stratégies pratiques pour rester concentré, atteindre les dates de livraison et constituer des équipes solides.Dans notre équipe de développement, nous avons examiné de très près ce que nous considérons comme une erreur de programmeur, une erreur de développeur, une erreur de conception et comment nous pourrions utiliser à la fois les tests unitaires et la fiabilité de construction de notre logiciel via DBC. de déboguer le processus de développement.
J'utilise UnitTest ++. Les tests sont dans un projet distinct, mais les tests réels sont étroitement liés au code réel. Ils existent dans un dossier sous la section en cours de test. -à-dire:
MyProject \ src \ < - source de l'application réelle
MyProject \ src \ Tests < - la source des essais
Si vous avez des dossiers imbriqués (et qui ne font pas) alors eux aussi auront leur Propre sous-répertoire \ tests.
Nous faisons de même, et notre système de construction construit automatiquement test EXE à partir du code qu'il trouve sous n'importe quel dossier source unittest. –
En utilisant tut http://tut-framework.sourceforge.net/ très simple, juste fichier d'en-tête seulement pas de macros. Peut générer des résultats XML
Vous devez séparer votre code de base en une bibliothèque partagée (dynamique), puis écrire la majeure partie de vos tests unitaires pour cette bibliothèque.
Il y a deux ans (2008), j'ai participé à un important projet d'infrastructure LSB déployé par la Linux Foundation. L'un des objectifs de ce projet était d'écrire des tests unitaires pour 40.000 fonctions à partir des bibliothèques centrales de Linux. Dans le cadre de ce projet, nous avons créé le AZOV technology et l'outil de base nommé API Sanity Autotest afin de générer automatiquement tous les tests. Vous pouvez essayer d'utiliser cet outil pour générer des tests unitaires pour votre bibliothèque (s) de base.
- 1. Organisation des tests unitaires dans Visual Studio
- 2. Y a-t-il des projets commerciaux à grande échelle qui utilisent Squeak Smalltalk?
- 3. Héritage des tests unitaires
- 4. Rester cohérent lorsque vous travaillez avec des projets à grande échelle
- 5. Comment effectuer des tests unitaires automatisés dans des packages SSIS?
- 6. Tests unitaires des packages DTS
- 7. Inclure des données dans mes tests unitaires
- 8. Comment déboguer des tests unitaires mbunit/Gallio dans Visual Studio
- 9. Comment faire des tests unitaires pour IgnoreRoute dans ASP.NET MVC
- 10. Modification des constantes pour les tests unitaires
- 11. Tests unitaires des règles StyleCop personnalisées
- 12. Tests unitaires en PHP?
- 13. Générer des classes automatiquement à partir de tests unitaires?
- 14. Tests unitaires dans Visual Studio 2008 Standard
- 15. Tests unitaires dans Xcode 3.1
- 16. Envoi de courrier fiable et le faire à grande échelle
- 17. Tests unitaires C++ avec Microsoft MFC
- 18. Afficher les résultats des tests unitaires dans VS 2008
- 19. Intégration des tests unitaires Silverlight avec le panneau Résultats des tests de Visual Studio 2008?
- 20. mise en œuvre à grande échelle d'analyse de fichiers journaux
- 21. Tests unitaires Visual Studio
- 22. Tests unitaires InstallScript
- 23. Comment accéder aux classes d'un autre ensemble à des fins de tests unitaires?
- 24. Pourriez-vous recommander des projets Open Source dont la source est largement testée avec des tests unitaires?
- 25. Tests unitaires SiteMapNode
- 26. Comment exécuter les tests unitaires CPPUnit
- 27. Tests unitaires en flex
- 28. ResourceManager et tests unitaires
- 29. Tests unitaires pour Boost.Spirit
- 30. Tests de projets en solution
Il y a une question très similaire qui vient d'être posée. Regardez [CppUnit] (http://cppunit.sourceforge.net), [CppUnitLite] (http://www.objectmentor.com/resources/downloads.html) et "[Travailler efficacement avec le code hérité] (http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052) "(tout par Michael Feathers –