GoogleTest vs CppUnit: les faits

Lors de la définition de notre infrastructure de test unitaire C ++ pour les prochaines années, nous avons sélectionné GoogleTest et CppUnit . J'ai une certaine expérience des deux et ma préférence va à GoogleTest. Quoi qu'il en soit, pour convaincre mon supérieur d’avoir besoin de quelques faits , j’ai donc lu sur Internet, notamment les manuels, les pages de wiki et certaines sources. Je suis venu avec une liste des avantages de GoogleTest et un seul avantage de CppUnit (les coureurs de test graphique). Ici, ils sont classés par utilité perçue :

  • INSTANTIATE_TEST_CASE_P to instantiate a test case with any set of parameters you want, including Cartesian products
  • FRIEND_TEST for testing private class members(for all the legacy code)
  • turning asserts into breakpoints
  • non-fatal asserts
  • "out of the box" googlemock integration
  • automatic tests detection, no need to enumerate them
  • tests can be disabled and enabled
  • tests to run can be selected using name patterns
  • value/type-parameterized tests
  • user-defined predicate asserts
  • death tests
  • much richer set of asserts
  • type asserts
  • asserting on subroutines
  • additional debug info can be added to asserts using <<
  • RecordProperty emits last value of property to the xml output
  • SCOPED_TRACE helps understand the context of an assertion failure coming from inside a sub-routine or loop.
  • xUnit xml output, can be shown by Jenkins right away without a XSLT transformation in between
  • supports custom types printers
  • time consumed by test indication(I suspect this is also possible with CppUnit but I haven figured it out yet)
  • test event listener API (user-defined plug-ins)
  • test shuffling
  • no exceptions and 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?

Enfin, y a-t-il des fonctionnalités intéressantes de CppUnit qui manquent dans GoogleTest ?

Merci!

58
Un coureur de test graphique est un avantage? Habituellement, vous voulez quelque chose qui puisse être automatisé facilement, car automatisation signifie que vous obtenez des commentaires de test plus facilement et plus souvent.
ajouté l'auteur Ben Voigt, source
Certaines des réponses à la comparaison des environnements de test d'unité c ++ concernent spécifiquement les fonctionnalités de GoogleTest.
ajouté l'auteur Greg Hewgill, source
Il y a quelques années, je faisais une enquête similaire. GoogleTest n'était pas disponible à l'époque. J'ai opté pour CXXTest, qui disposait d'un mécanisme pour énumérer les cas de test par une étape de pré-analyse avec Perl. C'était largement supérieur à CppTest. Cela dit, je ne connais rien à GoogleTest.
ajouté l'auteur Wolfram Arnold, source

3 Réponses

Si vous utilisez une ancienne version du compilateur gcc ou si votre code sous tests s'exécute sur vxWorks (ou VxSim), vous aurez peut-être plus de chances avec cppUnit que le framework Googletest.

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

  • par programme
  • par test élémentaire (ou groupe de tests)
  • par instance de test individuelle

Vous ne savez pas si cela est pris en charge dans cppUnit, mais cela peut s'avérer très pratique, en particulier avec les systèmes hérités.

En outre, il existe un plugin googletest pour Eclipse CDT.

7
ajouté

Si vous n'avez pas consulté xUnit ++ , je l'ai créé 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 si ce n'est pas le cas, je serais probablement disposé à l'ajouter.

3
ajouté
Honnêtement, je ne me souviens pas quelle licence est utilisée, mais je pense que c'est la licence MIT.
ajouté l'auteur moswald, source
Pouvez-vous le publier sous une licence open source permissive? Vous aimez la licence Apache 2.0 ou MIT?
ajouté l'auteur Sachin Joseph, source
Merci beaucoup, mais bien que le texte soit le même, License.txt ne dit pas que c'est la licence MIT. Pourriez-vous l'ajouter (quand vous avez le temps, bien sûr), si ça vous va? Vous aimez cette opensource.org/licenses/MIT ? Je pense que cela permettrait à plus de gens d'utiliser et d'essayer ce cadre génial :-)
ajouté l'auteur Sachin Joseph, source
La page wikipedia en.wikipedia.org/wiki/List_of_unit_testing_frameworks" rel="nofollow noreferrer"> en.wikipedia.org/wiki/List_of_unit_testing_frameworks ne dit pas non plus que xUnit ++ est publié sous la licence MIT, probablement parce que ce n'est spécifié nulle part dans votre repo bitbucket (je pense) :-)
ajouté l'auteur Sachin Joseph, source

Ce sont les avantages que je vois. Il y a quelques coureurs de test d'interface graphique:

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

J'ai utilisé le premier et cela fonctionne plutôt bien, bien qu'il soit en développement et nécessite du travail. Je ne sais pas s'il y a d'autres options.

3
ajouté