137 votes

Tests unitaires pour le code C++ - Outils et méthodologie

Je travaille sur un grand système c++ qui est en développement depuis quelques années maintenant. Dans le cadre d'un effort visant à améliorer la qualité du code existant, nous nous sommes engagés dans un vaste projet de refactoring à long terme.

Connaissez-vous un bon outil qui peut m'aider à écrire des tests unitaires en C++ ? Peut-être quelque chose de similaire à Junit ou Nunit ?

Quelqu'un peut-il donner de bons conseils sur la méthodologie d'écriture de tests unitaires pour des modules qui ont été écrits sans tests unitaires à l'esprit ?

1 votes

Regardez cette question : stackoverflow.com/questions/3150/

84voto

Joe Schneider Points 3563

L'application de tests unitaires à du code existant était le principal défi à relever. raison même Travailler efficacement avec le code hérité a été écrit. Michael Feathers est l'auteur - comme mentionné dans d'autres réponses, il a été impliqué dans la création des deux projets suivants CppUnit y CppUnitLite .

alt text

4 votes

Ajouté une vignette - voté vers le haut. Le livre aide plus que n'importe quel outil.

2 votes

Je pense que CPPUnit pourrait rendre plus simple l'écriture des tests. Nous utilisons CPPUnit, mais je ne suis pas satisfait. Je dois mettre à jour deux fichiers pour chaque test, et à mon avis, un test devrait être aussi simple à écrire que : 'TEST("testname") {ASSERT(1==1);}' Le livre, quant à lui, est un must pour tout le monde, pas seulement pour ceux qui travaillent avec du code hérité, mais aussi pour ceux qui le créent ;)

0 votes

J'ai lu le livre. Très bonne lecture

40voto

agnul Points 2828

Google a récemment publié sa propre bibliothèque de tests unitaires pour les applications C++, appelée Google Test.

Projet sur Google Code

1 votes

Est-il possible de l'utiliser avec VC++ ?

0 votes

Cela semble assez bien, surtout la façon dont ils doivent ajouter une description à chaque affirmation. D'un autre côté, je préfère personnellement avoir une classe de test unitaire plutôt que des macros qui ne ressemblent pas vraiment à des classes.

3 votes

Un autre point intéressant est la possibilité de se moquer : code.google.com/p/googlemock

30voto

andreas buykx Points 4710

Découvrez un excellent comparaison entre plusieurs suites disponibles. L'auteur de cet article a ensuite développé UnitTest++ .

Ce que j'apprécie particulièrement (en dehors du fait qu'il gère bien les exceptions, etc.), c'est qu'il n'y a qu'une quantité très limitée d'"administration" autour de la définition des cas de test et des montages de test.

3 votes

N'est-ce pas là notre erreur fondamentale ? Il a une bonne idée des projets existants, mais au lieu de les améliorer, il crée le sien.

0 votes

@peterchen : oui ; mais UnitTest++ est si petit et léger qu'il a de la valeur en étant un projet séparé - il est très facile de le mettre en place et de le faire fonctionner.

24voto

Jonas Points 1764

Boost a un Bibliothèque de test qui contient un support pour les tests unitaires. Cela peut valoir le coup de vérifier.

4 votes

Je peux recommander cette excellente boîte à outils.

1 votes

Oui, le boost est la voie à suivre. Pas de frais généraux, il suffit de tester et de partir ! J'étais en fait en train de travailler sur mon propre framework, désespéré, quand boost est venu à mon secours. Merci boost (pour tout !)

0 votes

Vous pouvez consulter un article que j'ai écrit sur l'introduction de Boost Unit Testing beroux.com/francais/articles/boost_unit_testing

22voto

Brian Stewart Points 4553

Noel Llopis de Jeux de l'intérieur est l'auteur de Exploration du cadre de tests unitaires C++ Jungle Un livre sur la programmation des jeux, une évaluation complète (mais maintenant dépassée) des différents cadres de tests unitaires C++, ainsi qu'un livre sur la programmation des jeux.

Il a utilisé CppUnitLite pendant un certain temps, en corrigeant diverses choses, mais a fini par s'associer à un autre auteur de bibliothèque de tests unitaires, et a produit UnitTest++ . Nous utilisons UnitTest++ ici, et je l'aime beaucoup, jusqu'à présent. Il a (pour moi) le bon équilibre entre puissance et faible encombrement.

J'ai utilisé des solutions maison, CxxTest (qui nécessite Perl), et boost::test. Lorsque j'ai implémenté les tests unitaires dans mon travail actuel, cela s'est résumé à UnitTest++ contre boost::test.

J'aime beaucoup la plupart des bibliothèques boost que j'ai utilisées, mais à mon avis, boost::test est un peu trop lourde. Je n'aime pas particulièrement le fait qu'elle vous oblige (AFAIK) à implémenter le programme principal du harnais de test en utilisant une macro boost::test. Je sais que ce n'est pas du TDD "pur", mais parfois nous avons besoin d'un moyen d'exécuter des tests à l'intérieur d'une application GUI, par exemple lorsqu'un drapeau de test spécial est passé en ligne de commande, et boost::test ne peut pas supporter ce type de scénario.

UnitTest++ était le cadre de test le plus simple à mettre en place et à utiliser que j'ai rencontré dans mon expérience (limitée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X