Comment implémenter les tests unitaires dans les projets C++ à grande échelle? [fermé]

je crois fermement à l'utilisation des tests unitaires dans le cadre de la construction de grandes applications multi-plateforme. Nous prévoyons actuellement d'effectuer nos essais 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 y a-t-il des outils comme JUnit pour les applications c++?

37
demandé sur haripkannan 2008-09-18 15:13:14

9 réponses

il y a beaucoup de cadres de test pour C++. CppUnit n'est certainement pas celui que je choisirais (du moins dans sa version stable 1.x, comme il manque de nombreux tests, et nécessite beaucoup de des lignes de codes). 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:

17
répondu Luc Hermitte 2015-03-03 16:15:51

C'est une approche raisonnable.

j'ai eu de très bons résultats avec UnitTest++ et Boost.Essai

j'ai regardé CppUnit, mais pour moi, ça ressemblait plus à une traduction des trucs de JUnit qu'à quelque chose qui viserait C++.

mise à Jour: Ces jours-ci, je préfère utiliser Attraper . Je l'ai trouvé efficace et simple à utiliser.

11
répondu Ferruccio 2016-07-19 11:14:30

vous devez séparer votre code de base en une bibliothèque partagée (dynamique) et ensuite écrire la majeure partie de vos tests unitaires pour cette bibliothèque.

il y a deux ans (2008), j'ai été impliqué dans un grand 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 de l'Linux bibliothèques de base. Dans le cadre de ce projet, nous avons créé la technologie AZOV et le 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 de base (s).

3
répondu linuxbuild 2015-08-22 21:26:04

j'utilise UnitTest++. Les essais font l'objet d'un projet distinct, mais les essais proprement dits sont liés au code réel. Ils existent dans un dossier sous la section à l'essai. c'est à dire:

Monprojet\src\ <- source de l'application

Monprojet\src\tests <- la source des tests

Si vous avez des dossiers imbriqués (et qui ne le fait pas), alors eux aussi auront leur propre sous-répertoire \tests.

2
répondu graham.reeds 2008-09-18 12:08:37

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 j'ai créé une configuration de construction séparée qui a construit tous les tests unitaires et le code source dépendant. Dans certains cas, j'ai voulu tester membre privé functionss d'une classe donc j'ai fait la classe de Test à un ami de classe de l'objet à tester, mais caché l'ami déclarations lors de la construction dans des configurations "non-test" à travers des déclarations préprocesseur.

j'ai fini par faire ces codes de gymnastique comme j'intégrais des tests dans le code d'héritage cependant. Si vous commencez avec le but de l'essai de l'Unité une meilleure conception peut être simple.

1
répondu NotJarvis 2008-09-18 11:19:48

vous pouvez créer un projet de test unitaire pour chaque bibliothèque dans votre arborescence des sources 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 rend plus facile d'exécuter une seule série de tests. En les plaçant dans un sous-répertoire, il garde votre base de code propre, mais garde aussi les tests proches du code.

Les Scripts

peuvent facilement être écrits pour exécuter toutes les suites de test dans votre arborescence des sources et collecter les résultats.

j'ai utilisé une version personnalisée du CppUnit original pendant des années avec grand succès, mais il y a d'autres alternatives maintenant. GoogleTest semble intéressant.

1
répondu Aaron Hinni 2008-09-18 11:36:55

je pense que votre sur la bonne voie avec les essais de l'unité et son un grand plan pour améliorer la fiabilité de votre produit.

bien que les tests unitaires ne va pas résoudre tous vos problèmes lors de la conversion de votre application à différentes plates-formes ou même différents systèmes d'exploitation. La raison pour cela, est le processus unité testage passe à travers pour découvrir des bogues dans votre application. Il jette simplement autant d'entrées imaginables dans votre système et attend un résultat sur le d'autres fin. C'est comme demander à un singe de frapper constamment au clavier et d'observer les résultats(Beta Testeurs).

à passer À l'étape suivante, avec la bonne unité de test, vous devez vous concentrer sur votre conception interne de votre application. La meilleure approche que j'ai trouvée était d'utiliser un modèle de conception ou un processus de conception appelé "programmation contractuelle" ou "conception par contrat". L'autre livre qui est très utile pour construire la fiabilité dans votre conception de base était.

Déboguer le processus de développement: des stratégies pratiques pour rester concentré, frapper les Dates de navires, et la construction D'é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 le test de l'unité et la construction de la fiabilité dans notre progiciel grâce à DBC et en suivant les conseils de débogage du processus de développement.

1
répondu Chad 2008-09-18 11:41:26

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

1
répondu 2008-09-18 12:48:04

cxxtest vaut également le détour pour un cadre léger, facile à utiliser pour les plates-formes croisées JUnit/CppUnit/xUnit-like pour C++. Nous trouvons très simple d'ajouter et de développer des tests

Aeryn est un autre C++ Cadre de Tests de la peine de chercher à

1
répondu David Sykes 2008-09-24 07:09:40