64 votes

GoogleTest vs CppUnit : Les faits

Dans le processus de définition de notre cadre de test unitaire C++ pour les années à venir, nous avons présélectionné GoogleTest y CppUnit . J'ai une certaine expérience des deux et ma préférence va à GoogleTest. Quoi qu'il en soit, pour convaincre mon patron, j'ai besoin de faits J'ai donc fait quelques lectures sur Internet, notamment les manuels, les pages wiki et certaines sources. Je suis arrivé à une liste d'avantages de GoogleTest et d'un seul avantage de CppUnit (exécuteurs de tests graphiques). Les voici classés par perception de l'utilité :

  • INSTANTIATE_TEST_CASE_P pour instancier un scénario de test avec n'importe quel ensemble de paramètres, y compris les produits cartésiens.
  • FRIEND_TEST pour tester les membres privés des classes (pour tout le code hérité).
  • transformer les alertes en points d'arrêt
  • alertes non fatales
  • intégration "out of the box" de googlemock
  • détection automatique des tests, pas besoin de les énumérer
  • les tests peuvent être désactivés et activés
  • les tests à exécuter peuvent être sélectionnés à l'aide de modèles de noms
  • tests paramétrés par valeur/type
  • assertions de prédicats définies par l'utilisateur
  • tests de décès
  • un ensemble beaucoup plus riche d'assertions
  • type d'affirmation
  • assertion sur les sous-routines
  • des informations de débogage supplémentaires peuvent être ajoutées aux assertions en utilisant <<
  • RecordProperty émet la dernière valeur de la propriété vers la sortie XML.
  • SCOPED_TRACE aide à comprendre le contexte d'un échec d'assertion provenant de l'intérieur d'une sous-routine ou d'une boucle.
  • La sortie XML de xUnit, peut être affichée par Jenkins immédiatement sans transformation XSLT entre les deux.
  • prend en charge les imprimantes de type personnalisé
  • temps consommé par l'indication du test (je soupçonne que cela est également possible avec CppUnit mais je n'ai pas encore trouvé)
  • API d'écoute d'événements de test (plug-ins définis par l'utilisateur)
  • brassage des tests
  • sans exception et RTTI

Ai-je raison de supposer que tous les éléments ci-dessus ne sont pas pris en charge par CppUnit ? Existe-t-il une fonctionnalité utile de GoogleTest non disponible dans CppUnit que je manque ?

Et le dernier mais non le moindre : Y a-t-il des fonctionnalités de CppUnit que GoogleTest peut utiliser ? manque ?

Merci !

7voto

ratkok Points 477

Si vous utilisez une ancienne version du compilateur gcc ou si votre code à tester fonctionne sur vxWorks (ou VxSim), vous aurez peut-être plus de chance avec cppUnit qu'avec le framework Googletest.

D'autre part, une autre caractéristique du framework googletest est la disponibilité de 3 niveaux différents de configuration/stockage :

  • par programme
  • par cas de test (ou groupe de test)
  • par instance de test individuelle

Je ne sais pas si cela est pris en charge par cppUnit, mais cela pourrait s'avérer très pratique, en particulier avec les anciens systèmes.

Il existe également un plugin googletest pour Eclipse CDT.

4voto

Brad W Points 91

Ce sont les avantages que je vois. Il existe un certain nombre d'exécuteurs de tests GUI :

  1. https://github.com/ospector/gtest-gbar
  2. https://github.com/SandyChapman/gtest-runner-qt

J'ai utilisé le premier et il fonctionne assez bien, même s'il est en cours de développement et nécessite quelques travaux. Je ne sais pas s'il existe d'autres options.

4voto

moswald Points 4521

Si vous n'avez pas regardé xUnit++ Je l'ai fait spécifiquement parce que je n'étais pas satisfait de ce qui était disponible (y compris gtest). La plupart de votre liste est supportée, et si ce n'est pas le cas, si c'est une fonctionnalité "indispensable", je serais probablement prêt à l'ajouter.

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