Comparison of C++ unit test frameworks
Solution 1
See this question for some discussion.
They recommend the articles: Exploring the C++ Unit Testing Framework Jungle, By Noel Llopis. And the more recent: C++ Test Unit Frameworks
I have not found an article that compares googletest to the other frameworks yet.
Solution 2
A new player is Google Test (also known as Google C++ Testing Framework) which is pretty nice though.
#include <gtest/gtest.h>
TEST(MyTestSuitName, MyTestCaseName) {
int actual = 1;
EXPECT_GT(actual, 0);
EXPECT_EQ(1, actual) << "Should be equal to one";
}
Main features:
- Portable
- Fatal and non-fatal assertions
- Easy assertions informative messages:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
- Google Test automatically detects your tests and doesn't require you to enumerate them in order to run them
- Make it easy to extend your assertion vocabulary
- Death tests (see advanced guide)
-
SCOPED_TRACE
for subroutine loops - You can decide which tests to run
- XML test report generation
- Fixtures / Mock / Templates...
Solution 3
I've just pushed my own framework, CATCH, out there. It's still under development but I believe it already surpasses most other frameworks. Different people have different criteria but I've tried to cover most ground without too many trade-offs. Take a look at my linked blog entry for a taster. My top five features are:
- Header only
- Auto registration of function and method based tests
- Decomposes standard C++ expressions into LHS and RHS (so you don't need a whole family of assert macros).
- Support for nested sections within a function based fixture
- Name tests using natural language - function/ method names are generated
It also has Objective-C bindings. The project is hosted on Github
Solution 4
Boost Test Library is a very good choice especially if you're already using Boost.
// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(MyTestCase)
{
// To simplify this example test, let's suppose we'll test 'float'.
// Some test are stupid, but all should pass.
float x = 9.5f;
BOOST_CHECK(x != 0.0f);
BOOST_CHECK_EQUAL((int)x, 9);
BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}
It supports:
- Automatic or manual tests registration
- Many assertions
- Automatic comparison of collections
- Various output formats (including XML)
- Fixtures / Templates...
PS: I wrote an article about it that may help you getting started: C++ Unit Testing Framework: A Boost Test Tutorial
Solution 5
Wikipedia has a comprehensive list of unit testing frameworks, with tables that identify features supported or not.
Comments
-
housemaister over 4 years
I know there are already a few questions regarding recommendations for C++ unit test frameworks, but all the answers did not help as they just recommend one of the frameworks but do not provide any information about a (feature) comparison.
I think the most interesting frameworks are CppUnit, Boost and the new Google testing framework. Has anybody done any comparison yet?