GoogleTest vs CppUnit: de feiten

Tijdens het instellen van ons C ++ -testschema voor de unit voor de komende jaren hebben we GoogleTest en CppUnit op de shortlist gezet. Ik heb enige ervaring met beide en mijn zware voorkeur is GoogleTest. Hoe dan ook om mijn baas te overtuigen, heb ik wat feiten nodig dus heb ik wat gelezen op het internet, inclusief de handleidingen, wikipagina's en enkele bronnen. Ik bedacht een lijst met GoogleTest-voordelen en een enkel CppUnit-voordeel (grafische testlopers). Hier zijn ze geordend op gepercipieerd bruikbaarheid:

  • 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

Heb ik gelijk als ik veronderstel dat al het bovenstaande niet wordt ondersteund door CppUnit? Is er een handige GoogleTest-functie niet beschikbaar in CppUnit die ik mis?

En last but not least: zijn er leuke CppUnit-functies die GoogleTest ontbreekt ?

Bedankt!

58
Een grafische testrunner is een voordeel? Meestal wilt u iets dat eenvoudig kan worden geautomatiseerd, omdat automatisering betekent dat u sneller en vaker testfeedback krijgt.
toegevoegd de auteur Ben Voigt, de bron
Enkele antwoorden op Vergelijking van c ++ unit-testkaders hebben specifiek betrekking op GoogleTest-functies.
toegevoegd de auteur Greg Hewgill, de bron
Een paar jaar geleden deed ik een soortgelijke enquête, GoogleTest was toen niet in de buurt. Ik heb mijn keuze gemaakt voor CXXTest met een mechanisme om de testcases op te sommen met een voorparsstap met Perl. Dat was veel beter dan CppTest. Dat gezegd hebbende, ik weet niets van GoogleTest.
toegevoegd de auteur Wolfram Arnold, de bron

3 antwoord

Als u de oudere versie van gcc-compiler gebruikt of als uw code onder tests op vxWorks (of VxSim) wordt uitgevoerd, hebt u wellicht een betere kans met cppUnit dan met Googletest-framework.

Aan de andere kant is een ander kenmerk van het googletest-framework de beschikbaarheid van 3 verschillende niveaus van setup/demontage:

  • per programma
  • per testcase (of testgroep)
  • per afzonderlijke testinstanties

Niet zeker of dit wordt ondersteund in cppUnit, maar dit kan erg handig zijn, vooral bij oudere systemen.

Er is ook een googletest-plug-in voor Eclipse CDT.

7
toegevoegd

Als je niet hebt gekeken naar xUnit ++ , maakte ik het specifiek omdat ik niet tevreden was met wat beschikbaar was (inclusief gtest). Het grootste deel van uw lijst wordt ondersteund, en zo niet, als het een "must have" -functie is, zou ik waarschijnlijk bereid zijn om het toe te voegen.

3
toegevoegd
Ik herinner me eerlijk gezegd niet welke licentie wordt gebruikt, maar ik denk dat het de MIT-licentie is.
toegevoegd de auteur moswald, de bron
Kun je het vrijgeven onder een permissieve open source-licentie? Zoals Apache 2.0 of MIT-licentie?
toegevoegd de auteur Sachin Joseph, de bron
Heel erg bedankt, maar hoewel de tekst hetzelfde is, zegt License.txt niet dat dit de MIT-licentie is. Zou je het willen toevoegen (als je natuurlijk tijd hebt), als het goed is? Like dit opensource.org/licenses/MIT ? Ik denk dat het meer mensen zou toestaan ​​dit prachtige kader te gebruiken en te gebruiken :-)
toegevoegd de auteur Sachin Joseph, de bron
De wikipedia-pagina en.wikipedia.org/wiki/List_of_unit_testing_frameworks zegt ook niet dat xUnit ++ is uitgebracht onder de MIT-licentie, waarschijnlijk omdat het nergens in je bitbucket-repo is opgegeven (denk ik) :-)
toegevoegd de auteur Sachin Joseph, de bron

Dat zijn de voordelen die ik zie. Er zijn een paar GUI-testlopers:

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

Ik heb de eerste gebruikt en het werkt redelijk goed hoewel het in ontwikkeling is en wat werk vereist. Weet niet of er andere opties zijn.

3
toegevoegd