61 votes

Cadre de test unitaire C++

J'utilise le framework Boost Test pour mon code C++ mais il présente deux problèmes qui sont probablement communs à tous les frameworks de test C++ :

  • Il n'y a aucun moyen de créer des stubs de test automatiques (en extrayant les fonctions publiques de certaines classes par exemple).
  • Vous ne pouvez pas exécuter un seul test - vous devez exécuter la "suite" complète de tests (à moins que vous ne créiez beaucoup de projets de test différents, je suppose).

Quelqu'un connaît-il un meilleur cadre de test ou dois-je éternellement être jaloux des outils de test dont disposent les développeurs Java/.NET ?

66voto

philsquared Points 13547

J'ai juste poussé mon propre cadre, CATCH à l'extérieur. Il est encore en cours de développement mais je pense qu'il surpasse déjà la plupart des autres frameworks. Chaque personne a des critères différents, mais j'ai essayé de couvrir la plupart des domaines sans trop de compromis. Jetez un coup d'œil à l'article de mon blog pour en avoir un avant-goût. Mes cinq fonctionnalités préférées sont les suivantes :

  • En-tête uniquement
  • Enregistrement automatique des tests basés sur les fonctions et les méthodes
  • Décompose les expressions C++ standard en LHS et RHS (afin que vous n'ayez pas besoin de toute une famille de macros assert).
  • Prise en charge des sections imbriquées dans un dispositif basé sur des fonctions
  • Nommez les tests en utilisant le langage naturel - les noms des fonctions et des méthodes sont générés.

Il n'a pas faire la génération de stubs - mais c'est un domaine assez spécialisé. Je pense que Isolateur++ est le premier outil qui y parvient vraiment. Notez que les frameworks de mocking/stubbing sont généralement indépendants des frameworks de tests unitaires. CATCH fonctionne particulièrement bien avec les objets fantaisie car l'état de test n'est pas transmis par le contexte.

Il dispose également de liaisons Objective-C.

[mise à jour]

Je viens de tomber sur une de mes réponses d'il y a quelques années. Merci pour tous les excellents commentaires ! Manifestement, Catch a beaucoup évolué au cours de cette période. Il prend désormais en charge les tests de type BDD (given/ when/ then), les balises, maintenant dans une version simple et de nombreuses améliorations et raffinements internes (par exemple, une ligne de commande plus riche, une sortie claire et expressive, etc.) Un article de blog plus à jour est disponible ici.

23voto

Jeff Miller Points 585

Jetez un coup d'œil au cadre de test C++ de Google.

Il est utilisé par Google pour tous ses projets C++ internes, il doit donc être très bon.

http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html

http://code.google.com/p/googletest

22voto

user49248 Points 241

Boost.Test permet de lancer un scénario de test par nom. Ou une suite de tests. Ou plusieurs d'entre eux.

Boost.Test n'insiste PAS sur l'implémentation de main, bien qu'il rende la chose facile à faire.

Boost.Test n'est PAS nécessaire pour être utilisé comme une bibliothèque. Il a une variante d'en-tête unique.

20voto

Brian Stewart Points 4553

Je viens de répondre à une question très similaire . J'ai fini par utiliser UnitTest++ de Noel Llopis. Je l'ai préféré à boost::test parce qu'il n'insiste pas sur l'implémentation du programme principal du harnais de test avec une macro - il peut s'insérer dans n'importe quel exécutable que vous créez. Il souffre du même inconvénient que boost::test, à savoir qu'il nécessite une bibliothèque à lier. J'ai utilisé CxxTest, et il est plus proche que n'importe quoi d'autre au pays du C++ de la génération automatique de tests (bien qu'il nécessite que Perl fasse partie de votre système de construction pour le faire). C++ ne fournit simplement pas les crochets de réflexion que les langages .NET et Java fournissent. Les outils MsTest de Visual Studio Team System - Developer's Edition génèrent automatiquement des stubs de test pour le C++ non géré, mais les méthodes doivent être exportées à partir d'une DLL, ce qui ne fonctionne pas avec les bibliothèques statiques. D'autres cadres de test dans le monde .NET peuvent également avoir cette capacité, mais je ne suis pas familier avec l'un d'eux. Pour l'instant, nous utilisons donc UnitTest++ pour le C++ non géré et je suis en train de choisir entre MsTest et NUnit pour les bibliothèques gérées.

8voto

yrp Points 2931

Je suis un grand fan de UnitTest++ Il est très léger, mais il fait le travail. Vous pouvez y exécuter des tests simples facilement.

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