web-dev-qa-db-fra.com

GoogleTest vs CppUnit: les faits

Dans le processus de définition de notre cadre de tests unitaires C++ pour les années à venir, nous avons présélectionné GoogleTest et CppUnit. J'ai une certaine expérience avec les deux et ma préférence est pour GoogleTest. Quoi qu'il en soit, pour convaincre mon patron que j'ai besoin de quelques faits j'ai donc fait quelques lectures sur Internet, y compris les manuels, les pages wiki et certaines des sources. Je suis venu avec une liste d'avantages GoogleTest et un seul avantage CppUnit (coureurs de test graphique). Ici, ils sont classés par perç utilité:

  • INSTANTIATE_TEST_CASE_P pour instancier un cas de test avec n'importe quel ensemble de paramètres que vous souhaitez, y compris les produits cartésiens
  • FRIEND_TEST pour tester les membres de la classe privée (pour tout le code hérité)
  • transformer des assertions en points d'arrêt
  • assertions non fatales
  • intégration googlemock "prête à l'emploi"
  • 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 nom
  • tests paramétrés par valeur/type
  • assertions de prédicat définies par l'utilisateur
  • tests de décès
  • ensemble d'assertions beaucoup plus riche
  • type affirme
  • affirmer des sous-programmes
  • des informations de débogage supplémentaires peuvent être ajoutées aux assertions à l'aide de <<
  • RecordProperty émet la dernière valeur de propriété dans la sortie XML
  • SCOPED_TRACE permet de comprendre le contexte d'un échec d'assertion provenant de l'intérieur d'une sous-routine ou d'une boucle.
  • la sortie XML xUnit peut être montrée par Jenkins immédiatement sans transformation XSLT entre les deux
  • prend en charge les imprimantes de types personnalisés
  • temps consommé par l'indication de test (je soupçonne que c'est également possible avec CppUnit mais je ne l'ai pas encore compris)
  • tester l'API d'écouteur d'événements (plug-ins définis par l'utilisateur)
  • test de mélange
  • aucune exception et RTTI

Ai-je raison de supposer que tout ce qui précède n'est pas pris en charge par CppUnit? Existe-t-il une fonctionnalité GoogleTest utile non disponible dans CppUnit qui me manque?

Et enfin et surtout: existe-t-il des fonctionnalités Nice CppUnit que GoogleTest manque?

Merci!

63
EstuansInterius

Si vous utilisez une ancienne version du compilateur gcc ou si votre code sous tests s'exécute sur vxWorks (ou VxSim), vous pourriez avoir une meilleure chance avec cppUnit que le framework Googletest.

D'un autre côté, une autre caractéristique du framework googletest est la disponibilité de 3 niveaux différents de configuration/démontage:

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

Je ne sais pas si cela est pris en charge dans cppUnit, mais cela peut être très utile, en particulier avec les systèmes hérités.

Il existe également un plugin googletest pour Eclipse CDT.

7
ratkok

Ce sont les avantages que je vois. Il existe quelques exécuteurs de test GUI:

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

J'ai utilisé le premier et il fonctionne plutôt bien même s'il est en cours de développement et nécessite un peu de travail. Je ne sais pas s'il existe d'autres options.

4
Brad W

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 prise en charge, et sinon, s'il s'agit d'une fonctionnalité "indispensable", je serais probablement disposé à l'ajouter.

4
moswald