Comment implémentez-vous le test unitaire dans les projets C ++ à grande échelle? [fermé]

StackOverflow https://stackoverflow.com/questions/91683

  •  01-07-2019
  •  | 
  •  

Question

Je crois fermement en l'utilisation de tests unitaires dans le cadre de la création de grandes applications multiplates-formes. Nous prévoyons actuellement de faire nos tests unitaires dans un projet séparé. 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 tels que JUnit pour les applications c ++?

Était-ce utile?

La solution

Il existe de nombreux cadres de l'unité de test pour C ++. CppUnit n’est certainement pas celui que je choisirais (du 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 framework 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 frameworks TU C ++:

Autres conseils

C'est une approche raisonnable.

J'ai obtenu de très bons résultats avec UnitTest ++ et Boost.Test

J'ai regardé CppUnit, mais pour moi, cela ressemblait plus à une traduction de la substance JUnit qu'à quelque chose de destiné à C ++.

Mise à jour: Ces jours-ci, je préfère utiliser la Catch . Je l’ai trouvée efficace et simple à utiliser.

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 grand projet d'infrastructure LSB déployé par The Linux Foundation. L'un des objectifs de ce projet était d'écrire des tests unitaires pour 40 000 fonctions à partir des bibliothèques principales de Linux. Dans le cadre de ce projet, nous avons créé la technologie AZOV et l'outil de base nommé API Autotest Sanity 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 ou vos bibliothèques de base.

J'utilise UnitTest ++. Les tests font partie d'un projet distinct, mais les tests réels sont étroitement liés au code réel. Ils existent dans un dossier sous la section à tester. c'est à dire:
MyProject \ src \ & Lt; - source de l'application réelle
MyProject \ src \ tests & Lt; - la source des tests
Si vous avez des dossiers imbriqués (et qui n'en ont pas), ils auront également leur propre sous-répertoire \ tests.

Cppunit est un équivalent direct de Junit pour les applications C ++. http://cppunit.sourceforge.net/cppunit-wiki

Personnellement, j'ai créé les tests unitaires dans un projet différent et créé une configuration de construction distincte qui comprenait tous les tests unitaires et le code source dépendant. Dans certains cas, je souhaitais tester les fonctions de membre privées d'une classe et j'ai donc fait de la classe Test une classe d'amis pour l'objet à tester, mais j'ai masqué les déclarations d'amis lors de la création de & "Non-test &"; configurations via des déclarations de préprocesseur.

Cependant, j’ai fini par faire cette gymnastique de codage car j’intégrais des tests dans le code existant. Si vous débutez dans le but de tester les unités, 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 plaçant dans un sous-répertoire, votre base de code reste propre, mais les tests restent proches du code.

Vous pouvez facilement écrire des scripts pour exécuter toutes les suites de tests de votre arborescence source et collecter les résultats.

J'utilise une version personnalisée du CppUnit d'origine depuis des années avec un grand succès, mais il existe maintenant d'autres alternatives. GoogleTest semble intéressant.

Je pense que vous êtes sur la bonne voie avec les tests unitaires et que 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 vers différentes plates-formes ou même avec différents systèmes d'exploitation. La raison en est que les tests des unités de traitement permettent de détecter les bogues dans votre application. Il ajoute simplement autant d'entrées imaginables dans votre système et attend un résultat à l'autre bout. C'est comme si un singe martelait constamment le clavier et observait les résultats (testeurs bêta).

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é & "Contrat de programmation &"; ou " Conception par contrat " ;. L’autre livre très utile pour renforcer la fiabilité de votre conception de base était.

Déboguer le processus de développement: stratégies pratiques pour rester concentré, respecter les dates d'expédition et constituer des équipes solides.

Au sein de notre équipe de développement, nous avons examiné de près ce que nous considérons comme une erreur de programmation, une erreur de développeur, une erreur de conception et comment nous pourrions utiliser les tests unitaires ainsi que la fiabilité de notre logiciel via DBC et en suivant les conseils de déboguer le processus de développement.

Utilisation du tutoriel http://tut-framework.sourceforge.net/ très simple, juste le fichier d'en-tête, mais pas de macros. Peut générer des résultats XML

CxxTest mérite également le détour: léger, facile à utiliser, multiplate-forme JUnit / CppUnit / xUnit- comme framework pour C ++. Nous trouvons très simple d’ajouter et de développer des tests

Aeryn est un autre framework de test C ++ qui vaut la peine d'être examiné

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top