Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GoogleTest vs CppUnit: The facts

In the process of setting our C++ unit testing framework for the next years we shortlisted GoogleTest and CppUnit. I have some experience with both and my heavy preference is GoogleTest. Anyways to convince my boss I need some facts so I did some reading on the Internet, including the manuals, wiki pages and some of the sources. I came up with a list of GoogleTest advantages and a single CppUnit advantage(graphic test runners). Here they are ordered by perceived usefulness:

  • 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

Am I correct in assuming that all of the above are not supported by CppUnit? Is there an useful GoogleTest feature not available in CppUnit I am missing?

And last but not least: Are there any nice CppUnit features that GoogleTest lacks?

Thanks!

like image 925
EstuansInterius Avatar asked Oct 27 '11 20:10

EstuansInterius


People also ask

What is Gtest used for?

Google Test (also known as gtest) is a unit testing library for the C++ programming language, based on the xUnit architecture. The library is released under the BSD 3-clause license.

Is Google an open source test?

Google test, or gtest is an open source framework for unit testing C\C++ projects.

How do I compare strings in Gtest?

String Comparison If you want to compare two string objects, use EXPECT_EQ , EXPECT_NE , and etc instead. Note that "CASE" in an assertion name means that case is ignored. A NULL pointer and an empty string are considered different.


2 Answers

If you use older version of gcc compiler or if your code under tests runs on vxWorks (or VxSim) you might have a better chance with cppUnit than Googletest framework.

On the other hand, another feature of the googletest framework is availability of 3 different levels of setup/teardown:

  • per program
  • per test case (or test group)
  • per individual test instances

Not sure if this is supported in cppUnit, but this might come very handy, especially with legacy systems.

Also, there is a googletest plugin for Eclipse CDT.

like image 51
ratkok Avatar answered Oct 01 '22 03:10

ratkok


If you haven't looked at xUnit++, I made it specifically because I was unhappy with what was available (including gtest). Most of your list is supported, and if not, if it's a "must have" feature, I'd probably be willing to add it.

like image 34
moswald Avatar answered Oct 01 '22 03:10

moswald